第二次作業

第二次作業

學生信息包括:學號,姓名,年齡,性別,出生年月,學號,成績,排名等。試設計一學生信息管理系統,使之能提供以下功能:

1系統以菜單方式工作。

2學生信息錄入功能——輸入。

3學生信息瀏覽功能——輸出。

4學生信息查詢功能——算法。

按學號查詢;

按姓名查詢。

5  學生信息的刪除與修改

設計一個能實現學生信息管理系統,讓它來運行和管理學生信息。它在現實生活中運用方便的、管理方便。它能輸入學生學號、年齡、性別、出生年月、成績、排名。系統以菜單的方式進行工作,進入子菜單後,還可以返回主菜單。在子菜單中的各種操作都有中文說明,操作簡單、易懂。只要我們正確的操作系統,系統就無異常現在,當然系統也能對一些基本的錯誤做出提示,並能讓使用者重新進行操作。

對各個操作的成功,如:添加學生信息、修改學生信息、刪除學生信息,系統都輸出“…….的成功”的字樣。系統對刪除和修改前,還進行“確定”和“取消”。系統對不存在的學號和姓名系統能判斷是否存在。對已存在的學號,操作者不能添加和這個學號一樣的學生信息,同時系統還提示已有此學號。對於修改、刪除和查詢,系統遇到不存在的學生能提示沒有這個信息。

按照函數功能,將不同的代碼放到一起,用大括號括起來,然後給這段代碼起個名字表示,然後還要設置上參數,一遍使用這個函數的時候向裏傳遞實際的值,類似一個加法的函數,完成兩個數的相加,我們可以寫成

myadd(int a, int b)

{

   int c;

   c=a+b;

   return c;

}

myadd就是我們給這個函數起的名字,以便使用,ab的作用接收調用者傳遞過來的數,然後把接收的兩個數相加後返回,這個函數的值在調用後就是返回的值c,所以如果我們想算99+23等於多少,只要調用我們寫好的函數

myadd(99,23),這個時候函數的值就是99+23了,如果把結果保存在變量d中,可以寫成

d=myadd(99,23);

有了函數,我們就可以把不同功能的代碼組織到一起,不僅自己方便,而且程序特別簡單明瞭,便於修改,其他人寫的函數我們還可以直接拿來用。

所以我們的這個學生信息管理系統形式就非常簡單了,一共用到了三個函數

int main()

  int i,sum;

  pagedis();

  check();

以下是完整的學生管理系統的總程序:

 

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

  /*結構體類型*/

typedef struct 

{  int num;/*學號*/

    char name[20];/*姓名*/

         charsex[5];/*性別*/

         intage;/*年齡*/

         charstudentclass[20];/*班級*/

         intscore;/*成績*/

}STUDENTS;

 

int read_file(STUDENTS stu[])

{       FILE*fp;

   int i=0;

         if((fp=fopen("stu.txt","rt"))==NULL)

         {printf("\n\n*****庫存文件不存在!請創");

          return 0;

         }

         while(feof(fp)!=1)

    {

         fread(&stu[i],sizeof(STUDENTS),1,fp);

         if(stu[i].num==0)

                  break;

         else

                  i++;

         }

         fclose(fp);

         returni;

}

void save_file(STUDENTS stu[],int sum)

{FILE*fp;

 inti;

 if((fp=fopen("stu.txt","wb"))==NULL)

 {printf("寫文件錯誤!\n");

 return;

 }

  for(i=0;i<sum;i++)

           if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)

                     printf("寫文件錯誤!\n");

            fclose(fp);

}

 

 

/*創建學生信息*/

int input(STUDENTS stu[])

{ int i,x;

  for(i=0;i<1000;i++)

   {

   system("cls"); 

   printf("\n\n                 錄入學生信息  (最多%d)\n",MAX);

   printf("              ----------------------------\n");

  

       printf("\n                    %d個學生",k+1);

             printf("\n 請輸入學生的學號:");

       scanf("%d",&stu[k].num);

       printf("\n 請輸入學生的姓名:");

       scanf("%s",stu[k].name);

               printf("\n請輸入學生的性別:");

       scanf("%s",stu[k].sex);

       printf("\n 請輸入學生的年齡:");  

       scanf("%d",&stu[k].age); 

       printf("\n 請輸入學生的班級:");

       scanf("%s",stu[k].studentclass);       

       printf("\n 請輸入學生的成績:");

       scanf("%d",&stu[k++].score);

       printf("\n 請按1鍵返回菜單或按0鍵繼續創建");

                  scanf("%d",&x);

                  if(x)

                    break;

   }

     

      return k;

}

 

 

/*刪除學生信息*/

void deletel(STUDENTS stu[])

  {system("cls");

  char Stuname2[20];

  int i,j;

  printf("請輸入學生姓名:");

  scanf("%s",Stuname2);

  printf("\n");

  for(i=0;i<k;i++)

  if(strcmp(stu[i].name,Stuname2)==0)  

    for(j=0;j<20;j++)

      stu[i].name[j]=stu[i+1].name[j];

  k--;

        

 

  printf("刪除成功\n");

  printf("按任意鍵加回車返回主菜單!");

  scanf("%d",&i);

  getchar();

}

 

/*打印學生信息*/                                                                                                                                                                                                                                                       

void output(STUDENTS stu[])

{ system("cls");

  int i;

  for(i=0;i<k;i++) 

    printf("學號:%d,姓名:%s,性別:%s,年齡:%d,班級:%s,成績: %d\n",stu[i].num,stu[i].name,

                   stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

  printf("按任意鍵加回車返回主菜單!");

  scanf("%d",&i);

  getchar();

}

 

/*查詢學生信息*/

void inquire(STUDENTS stu[])

  {int i;

   int num;

   system("cls");

   printf("     \n\n請輸入您要查找的學生的學號");

   scanf("%d",&num);

   for(i=0;i<k;i++)

     if(num==stu[i].num)

        printf("\n\n\n學號:%d,姓名:%s,性別:%s,年齡:%d,班級:%s,成績: %d\n",stu[i].num,stu[i].name,

                   stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

   printf("按任意鍵加回車返回主菜單!");

         scanf("%d",&i);

   getchar();

  }

 

 

/*修改學生信息*/

void change(STUDENTS stu[])

 {  int num,i,choice;

    system("cls");

          printf("\n\n\n      請輸入您要修改的學生的學號");

    scanf("%d",&num);

    for(i=0;i<k;i++)

    { if(num==stu[i].num)

        printf("\n學號:%d,姓名:%s,性別:%s,年齡:%d,班級:%s,成績: %d\n",stu[i].num,stu[i].name,

                   stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

 

     printf("\n\n\n     ********請輸入您想要修改的數據********\n\n");

    printf("                1. 學號\n\n");

    printf("                2. 姓名\n\n");

          printf("                3. 性別\n\n");

    printf("                4. 年齡\n\n");

    printf("                5. 班級\n\n");

    printf("                6. 成績\n\n");

    printf("                 請選擇(1-6:");

           scanf("%d",&choice);

           switch(choice)

           {case 1:{

                         printf("\n   請輸入你改的新學號");

                   scanf("%d",&stu[i].num);

                             break;

                             }

            case 2:{

                        printf("\n   請輸入你改的新姓名");

                    scanf("%s",stu[i].name);

                             break;

                            }

            case 3:{

                         printf("\n   請輸入你改的新性別");

                    scanf("%s",stu[i].sex);

                             break;

                            }

            case 4:{

                         printf("\n   請輸入你改的新年齡");

                    scanf("%d",&stu[i].age);

                             break;

                            }

            case 5:{

                         printf("\n   請輸入你改的新班級");

                   scanf("%s",stu[i].studentclass);

                             break;

                            }

            case 6:{

                         printf("\n   請輸入你改的新成績");

                   scanf("%d",&stu[i].score);

                             break;

                            }

           }

          

            printf("學號:%d,姓名:%s,性別:%s,年齡:%d,班級:%s,成績:%d\n",stu[i].num,stu[i].name,

                   stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

      printf("按任意鍵加回車返回主菜單!");

            scanf("%d",&i);

            break;

          }

}

 

 

/*學生成績信息排名*/

void sort(STUDENTS stu[])

 {  int i,j,n=1,x;

    system("cls");

    int t;

     for(i=0;i<k-1;i++)

                  for(j=i+1;j<k;j++)

                          if(stu[i].score<stu[j].score)

                          {t=stu[i].score;

                            stu[i].score=stu[j].score;

                            stu[j].score=t;

              t=stu[i].num;

                             stu[i].num=stu[j].num;

                            stu[j].num=t;

 

                          }

    for(i=0;i<k;i++)

                  printf("排名    學號    成績\n %d       %d      %d\n",n++,stu[i].num,stu[i].score);

    printf("按任意鍵加回車返回主菜單!");

          scanf("%d",&x);

    getchar();

  }

 

void pagedis()

{

  printf(" \n\n\n                  **********************************\n");

  printf("                  *                               *\n");

  printf("                  *                               *\n");

  printf("                  *                                *\n");

  printf("                  *     歡迎進入學生信息管理系統   *\n");

  printf("                  *                               *\n");

  printf("                  *                               *\n");

  printf("                   *                                *\n");

  printf("                  **********************************\n");

  

}

void check()

{

  char userName[5];/*用戶名*/

  char userPWD[5];/*密碼*/

  int i,sum;

  system("color 4E");

  for(i = 1; i < 4; i++)

   {

     /*用戶名和密碼均爲abcde;*/

             printf("   用戶名和密碼均爲abcde\n\n");

       printf("\n       請輸入您的用戶名:");

       gets(userName);

       

       printf("\n       請輸入您的密碼:");

       gets(userPWD);

       

       if ((strcmp(userName,"abcde")==0) &&(strcmp(userPWD,"abcde")==0))/*驗證用戶名和密碼*/

       {

           printf("用戶名和密碼正確,顯示主菜單");

           return;

       }

       else

       {

           if (i < 3)

           {

                printf("用戶名或密碼錯誤,提示用戶重新輸入");

                printf("用戶名或密碼錯誤,請重新輸入!");

           }

           else

           {

                printf("連續3次輸錯用戶名或密碼,退出系統。");

                printf("您已連續3次將用戶名或密碼輸錯,系統將退出!");

                exit(1);

           }

       }

   }

}

void menu()

{

 STUDENTS stu[20];

  intchoice,k,sum;

 sum=read_file(stu);

 if(sum==0)

  {  printf("首先錄入基本庫存信息!按回車後進入*****\n");

     getch();

           sum=input(stu);

   }

 

  do

 {  system("cls"); 

    printf("\n\n\n              ********學生信息管理系統********\n\n");

    printf("                     1. 創建學生信息\n\n");

    printf("                     2. 打印學生信息\n\n");

          printf("                      3. 查詢學生信息\n\n");

    printf("                     4. 修改學生信息\n\n");

    printf("                     5. 刪除學生信息\n\n");

    printf("                     6. 學生成績信息排名\n\n");

    printf("                     0. 退出系統\n\n");

    printf("                      請選擇(0-6:");

    scanf("%d",&choice);

   switch(choice)

    {

     case 1: k=input(stu); break;/*創建學生信息*/

      case 2: output( stu) ; break;/*打印學生信息*/

     case 3: inquire(stu); break;/*查詢學生信息*/

     case 4: change(stu); break;/*修改學生信息*/

     case 5: deletel(stu); break;/*刪除學生信息*/

     case 6: sort(stu); break;/*學生成績信息排名*/

     case 0: break;

    }

 }while(choice!=0);

 save_file(stu,sum);

}

int main()

  

 

  inti,sum;

 pagedis();

 check();

 menu();  

 

}               

 

 

下面是一個職工工資管理系統的程序,此程序類似於上方學生管理系統程序,代碼如下:

#include "stdafx.h"

#include "iostream"

#include "string"

#include "list"

#include "cassert"

using namespace std;

 

/*

編號、姓名、部門、應付工資、保險、稅金、實付工資。

其中實付工資由公式計算得到:實付工資=應付工資 - 保險- 稅金

*/

struct employee{

 string m_num;//編號

string m_name;//姓名

string m_dep;//部門

double m_salary;//應付工資

double m_insurance;//保險

double m_tax;//稅金

};

 

/*

(1)錄入:輸入職工數據,其中“實付工資”通過計算得到;

(2)刪除:刪除指定的職工信息(輸入姓名,若找到則刪除該信息)

(3) 修改:允許對已經錄入的數據重新進行編輯、修改;

(4) 顯示:顯示全體職工數據;

(5)查詢:

a. 輸入職工姓名,顯示該職工的全部數據;

b. 輸入某部門值,顯示該部門職工的數據、工資總額、平均工資。

(6) 退出程序。

*/

 

list<employee> emps;

 

int _tmain(int argc, _TCHAR* argv[])

{

 voidprint(const employee &e);

 voidinput();

 voiddel();

 voidmod();

 voidshow_all();

 voidshow_name();

 voidshow_dep();

 

 cout<<"簡易職工薪水管理程序 by做他\n";// delete this line

 cout<<"版權沒有請隨意複製或修改任何代碼\n";//deletethis line

 

 cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";

int choose=0;

 cin>>choose;

 assert(!cin.fail());

 while (choose!=6)

 {

 if(choose==1) input();

 if(choose==2) del();

 if(choose==3) mod();

 if(choose==4)

 {

 intchoice=0;

 cout<<"請選擇操作 1.按姓名查詢 2.按部門查詢 3.退出:";

cin>>choice;

 if(choice==1) show_name();

 if(choice==2) show_dep();

 if(choice==3)

 {

 cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";

cin>>choose;

 assert(!cin.fail());

 continue;

 }

 }

 if(choose==5) show_all();

 cout<<"請選擇操作:1.錄入 2.刪除 3.修改 4.查詢 5.顯示所有員工 6.退出 :";

cin>>choose;

 assert(!cin.fail());

 }

 return 0;

}

 

void print(const employee &e)

{

 cout<<"編號:"<<e.m_num<<endl;

 cout<<"姓名:"<<e.m_name<<endl;

 cout<<"部門:"<<e.m_dep<<endl;

 cout<<"保險:"<<e.m_insurance<<endl;

 cout<<"稅金:"<<e.m_tax<<endl;

 cout<<"應付工資:"<<e.m_salary<<endl;

 cout<<"實付工資:"<<e.m_salary-e.m_insurance-e.m_tax<<endl;

}

 

void input()

{

 string num,name,dep;

 double salary,ins,tax;

 cout<<"請輸入員工編號:";

cin>>num;

 cout<<"請輸入員工姓名:";

cin>>name;

 cout<<"請輸入員工部門:";

cin>>dep;

 cout<<"請輸入員工保險:";

cin>>ins;

 assert(!cin.fail());

 cout<<"請輸入員工稅金:";

cin>>tax;

 assert(!cin.fail());

 cout<<"請輸入員工應付工資:";

cin>>salary;

 assert(!cin.fail());

 employee temp;

 temp.m_dep=dep;

 temp.m_insurance=ins;

 temp.m_name=name;

 temp.m_num=num;

 temp.m_salary=salary;

 temp.m_tax=tax;

 emps.push_back(temp);

 cout<<"員工錄入操作完畢.\n";

}

 

void del()

{

 if(emps.size()==0)

 {

 cout<<"沒有員工記錄.\n";

 return;

 }

 string name;

 boolisfind=false;

 cout<<"請輸入要刪除的員工姓名:";

cin>>name;

 list<employee>::iterator iter;

 for(iter=emps.begin();iter!=emps.end();iter++)

 {

 if(iter->m_name==name)

 {

 isfind=true;

 emps.erase(iter);

 cout<<"姓名爲\""<<name<<"\"的員工記錄已刪除.\n";

 return;

 }

 }

 if(!isfind)

 {

 cout<<"沒有找到姓名爲\""<<name<<"\"的員工.\n";

 return;

 }

}

 

void mod()

{

 if(emps.size()==0)

 {

 cout<<"員工記錄爲空.\n";

 return;

 }

 boolisfind=false;

 string name;

 cout<<"請輸入要修改的員工姓名:";

cin>>name;

 list<employee>::iterator iter;

 for(iter=emps.begin();iter!=emps.end();iter++)

 {

 if(iter->m_name==name)

 {

 isfind=true;

 cout<<"姓名爲\""<<name<<"\"的員工記錄已找到.\n";

 break;

 }

 }

 if(isfind)

 {

 string num,name,dep;

 double tax,ins,salary;

 print(*iter);

 cout<<endl;

 cout<<"請輸入新的員工編號:";

cin>>num;

 cout<<"請輸入新的員工姓名:";

cin>>name;

 cout<<"請輸入新的員工部門:";

cin>>dep;

 cout<<"請輸入新的員工保險:";

cin>>ins;

 assert(!cin.fail());

 cout<<"請輸入新的員工稅金:";

cin>>tax;

 assert(!cin.fail());

 cout<<"請輸入新的員工工資:";

cin>>salary;

 assert(!cin.fail());

 iter->m_dep=dep;

 iter->m_insurance=ins;

 iter->m_name=name;

 iter->m_num=num;

 iter->m_salary=salary;

 iter->m_tax=tax;

 cout<<"1 員工記錄被成功修改.\n";

 }

 else

 {

 cout<<"沒有找到姓名爲\""<<name<<"\"的員工記錄.\n";

 }

}

 

void show_all()

{

 if(emps.size()==0)

 {

 cout<<"員工記錄爲空.\n";

 return;

 }

 cout<<"顯示全體員工數據:\n";

 cout<<"--------------------\n";

 list<employee>::iterator iter;

 for(iter=emps.begin();iter!=emps.end();iter++)

 {

 cout<<endl;

 print(*iter);

 cout<<endl;

 }

 cout<<"--------------------\n";

}

 

void show_name()

{

 if(emps.size()==0)

 {

 cout<<"員工記錄爲空.\n";

 return;

 }

 boolisfind=false;

 string name;

 cout<<"請輸入要查詢的員工姓名:";

cin>>name;

 list<employee>::iterator iter;

 for(iter=emps.begin();iter!=emps.end();iter++)

 {

 if(iter->m_name==name)

 {

 isfind=true;

 cout<<"姓名爲\""<<name<<"\"的員工記錄已找到.\n";

 print(*iter);

 break;

 }

 }

 if(!isfind)

 {

 cout<<"沒有找到姓名爲\""<<name<<"\"的員工.\n";

 return;

 }

}

 

void show_dep()

{

 if(emps.size()==0)

 {

 cout<<"員工記錄爲空.\n";

 return;

 }

 double isfind=0.00;

 double total_salary=0.00;

 string dep;

 cout<<"請輸入要查詢的部門名稱:";

cin>>dep;

 cout<<"部門["<<dep<<"]的員工信息:\n";

 cout<<"--------------------\n\n";

 list<employee>::iterator iter;

 for(iter=emps.begin();iter!=emps.end();iter++)

 {

 if(iter->m_dep==dep)

 {

 isfind++;

 total_salary+=iter->m_salary;

 print(*iter);

 cout<<endl;

 continue;

 }

 }

 cout<<"--------------------\n";

 if(isfind==0)

 {

 cout<<"沒有找到名稱爲["<<dep<<"]的部門.\n";

 }

 else

 {

 cout<<"部門["<<dep<<"]工資統計:\n";

 cout<<"工資總額:"<<total_salary<<endl;

 cout<<"平均工資:"<<total_salary/isfind<<endl;

 }

}

 

 

150206216


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章