- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- struct student
- {
- int num;
- char name[20];
- float score1;
- float score2;
- float score3;
- float average;
- };
- struct student stu[50];
- struct student avg;
- int count=0,passwd=1;
- int k=0;
- void input();
- void display();
- void sort();
- void sort_name();
- void sort_score1();
- void sort_score2();
- void sort_score3();
- void sort_average();
- void query();
- void query_num();
- void query_name();
- void update();
- void update_num();
- void update_name();
- void re();
- void re_num();
- void re_name();
- void renew();
- void renew_num();
- void renew_name();
- void pa();
- void list();
- void main()
- {
- int p;
- system("cls");
- printf("\n\n\n\n\n\n\n\t\t\t請輸入1啟動: ");
- scanf("%d",&p);
- if (p==passwd)
- list();
- else
- {
- printf("\n\n\n\n輸入錯誤!任意鍵重新輸入!");
- getch();
- main();
- }
- }
- void list()
- {
- int a;
- system("cls");
- printf("----------------學生成績管理系統----------------\n\n\n");
- printf("1.錄入\n2.顯示\n3.排序\n4.查詢\n5.修改\n6.刪除\n7.恢復\n8.退出\n\n");
- printf("請選擇: ");
- scanf("%d",&a);
- switch(a)
- {
- case 1:
- input();
- break;
- case 2:
- display();
- break;
- case 3:
- sort();
- break;
- case 4:
- query();
- break;
- case 5:
- update();
- break;
- case 6:
- re();
- break;
- case 7:
- renew();
- break;
- case 8:
- break;
- default:
- printf("選擇錯誤!");
- break;
- }
- }
- void input()
- {
- char select;
- system("cls");
- printf("學生成績錄入\n\n");
- do
- {
- printf("\n請輸入第%d個學生信息\n\n",count+1);
- printf("學號: ");
- scanf("%d",&stu[count].num);
- printf("姓名: ");
- scanf("%s",stu[count].name);
- printf("成績一:");
- scanf("%f",&stu[count].score1);
- printf("成績二:");
- scanf("%f",&stu[count].score2);
- printf("成績三:");
- scanf("%f",&stu[count].score3);
- stu[count].average=(stu[count].score1+stu[count].score2+stu[count].score3)/3;
- printf("是否繼續輸入(y/n): ");
- fflush(stdin);
- select=getchar();
- count++;
- }while(select=='y'||select=='Y');
- if (select=='n'||select=='N')
- {
- list();
- }
- }
- void display()
- {
- int i;
- system("cls");
- printf("學生成績顯示:\n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回主菜單......");
- getch();
- list();
- }
- void sort()
- {
- int select;
- system("cls");
- printf("學生成績排序:\n\n\n");
- printf("\n\t\t\t1.按姓名排序\n\t\t\t2.按成績一排序\n\t\t\t3.按成績二排序\n\t\t\t4.按成績三排序\n\t\t\t5.按平均分排序\n\t\t\t6.返回\n\n");
- printf("請選擇: ");
- scanf("%d",&select);
- switch(select)
- {
- case 1:
- sort_name();
- break;
- case 2:
- sort_score1();
- break;
- case 3:
- sort_score2();
- break;
- case 4:
- sort_score3();
- break;
- case 5:
- sort_average();
- break;
- case 6:
- list();
- break;
- default:
- printf("輸入錯誤!任意鍵返回主菜單!");
- getch();
- list();
- break;
- }
- }
- void sort_name()
- {
- int i;
- struct student temp;
- system("cls");
- printf("按姓名排序: \n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- if (strlen(stu[i].name)<strlen(stu[i+1].name))
- {
- temp=stu[i];
- stu[i]=stu[i+1];
- stu[i+1]=temp;
- }
- }
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回......");
- getch();
- sort();
- }
- void sort_score1()
- {
- int i;
- struct student temp;
- system("cls");
- printf("按成績一排序: \n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- if (stu[i].score1<stu[i+1].score1)
- {
- temp=stu[i];
- stu[i]=stu[i+1];
- stu[i+1]=temp;
- }
- }
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回......");
- getch();
- sort();
- }
- void sort_score2()
- {
- int i;
- struct student temp;
- system("cls");
- printf("按成績一排序: \n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- if (stu[i].score2<stu[i+1].score2)
- {
- temp=stu[i];
- stu[i]=stu[i+1];
- stu[i+1]=temp;
- }
- }
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回......");
- getch();
- sort();
- }
- void sort_score3()
- {
- int i;
- struct student temp;
- system("cls");
- printf("按成績一排序: \n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- if (stu[i].score2<stu[i+1].score3)
- {
- temp=stu[i];
- stu[i]=stu[i+1];
- stu[i+1]=temp;
- }
- }
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回......");
- getch();
- sort();
- }
- void sort_average()
- {
- int i;
- struct student temp;
- system("cls");
- printf("按平均分排序: \n\n");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- for (i=0;i<count;i++)
- {
- if (stu[i].average<stu[i+1].average)
- {
- temp=stu[i];
- stu[i]=stu[i+1];
- stu[i+1]=temp;
- }
- }
- for (i=0;i<count;i++)
- {
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- }
- printf("任意鍵返回......");
- getch();
- sort();
- }
- void query()
- {
- int select;
- system("cls");
- printf("學生成績查詢:");
- printf("\n\n\n\t\t\t1.按學號查詢\n\n\t\t\t2.按姓名查詢\n\n\t\t\t3.返回");
- printf("\n\n請選擇: ");
- scanf("%d",&select);
- switch(select)
- {
- case 1:
- query_num();
- break;
- case 2:
- query_name();
- break;
- case 3:
- list();
- break;
- default:
- printf("輸入錯誤!任意鍵返回主菜單!");
- getch();
- list();
- }
- }
- void query_num()
- {
- int q,i;
- system("cls");
- printf("按學生學號查詢:\n\n");
- printf("請輸入要查詢學生的學號:");
- scanf("%d",&q);
- for (i=0;i<count;i++)
- {
- if (stu[i].num==q)
- {
- printf("\n%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","========","========","========");
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- printf("查詢完畢,任意鍵返回!");
- getch();
- query();
- break;
- }
- else
- continue;
- }
- printf("對不起,您所查詢的學生不存在!任意鍵返回!");
- getch();
- query();
- }
- void query_name()
- {
- int i,j;
- char find[20];
- system("cls");
- printf("按學生姓名查詢\n\n\n");
- printf("輸入要查詢的學生的姓名: ");
- scanf("%s",find);
- for (i=0;i<count;i++)
- {
- j=strcmp(find,stu[i].name);
- if (j==0)
- {
- printf("\n%-8s%-12s%-12s%-12s%-12s%s\n","學號","姓 名","成績一","成績二","成績三","平均成績");
- printf("%-8s%-12s%-12s%-12s%-12s%s\n","====","========","=======","=======","========","========");
- printf("%-8d%-12s%-12.2f%-12.2f%-12.2f%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].average);
- printf("\n\n查詢完畢,任意鍵返回!");
- getch();
- query();
- break;
- }
- else
- continue;
- }
- printf("對不起,您所查詢的學生不存在!任意鍵返回!");
- getch();
- query();
- }
- void update()
- {
- int select;
- system("cls");
- printf("修改學生信息:\n\n\n");
- printf("\t\t\t1.按學號修改\n\n\t\t\t2.按姓名修改\n\n\t\t\t3.返回");
- printf("\n\n請選擇:");
- scanf("%d",&select);
- switch(select)
- {
- case 1:
- update_num();
- break;
- case 2:
- update_name();
- break;
- case 3:
- list();
- break;
- default:
- printf("輸入錯誤!任意鍵返回!");
- getch();
- list();
- break;
- }
- }
- void update_num()
- {
- int i,find;
- system("cls");
- printf("按學生學號修改: \n\n");
- printf("請輸入要修改的學生的學號: ");
- scanf("%d",&find);
- for (i=0;i<count;i++)
- {
- if (stu[i].num==find)
- {
- printf("\n\n學號: ");
- scanf("%d",&stu[i].num);
- printf("姓名: ");
- scanf("%s",stu[i].name);
- printf("成績一: ");
- scanf("%f",&stu[i].score1);
- printf("成績二: ");
- scanf("%f",&stu[i].score2);
- printf("成績三: ");
- scanf("%f",&stu[i].score3);
- printf("修改成功!任意鍵返回主菜單!");
- getch();
- list();
- break;
- }
- else
- continue;
- }
- printf("您所要修改的學生不存在,任意鍵返回主菜單!");
- getch();
- list();
- }
- void update_name()
- {
- int i,j=0;
- char find[20];
- system("cls");
- printf("按學生姓名修改: \n\n");
- printf("請輸入要修改的學生的姓名: ");
- scanf("%s",find);
- for (i=0;i<count;i++)
- {
- j=strcmp(find,stu[i].name);
- if (j==0)
- {
- printf("\n\n學號: ");
- scanf("%d",&stu[i].num);
- printf("姓名: ");
- scanf("%s",stu[i].name);
- printf("成績一: ");
- scanf("%f",&stu[i].score1);
- printf("成績二: ");
- scanf("%f",&stu[i].score2);
- printf("成績三: ");
- scanf("%f",&stu[i].score3);
- printf("修改成功!任意鍵返回主菜單!");
- getch();
- list();
- break;
- }
- else
- continue;
- }
- printf("您所要修改的學生不存在,任意鍵返回主菜單!");
- getch();
- list();
- }
- void re()
- {
- int select;
- system("cls");
- printf("刪除學生信息: \n\n\n");
- printf("\t\t\t1.按學號刪除\n\n\t\t\t2.按姓名刪除\n\n\t\t\t3.返回\n\n");
- printf("請選擇: ");
- scanf("%d",&select);
- switch(select)
- {
- case 1:
- re_num();
- break;
- case 2:
- re_name();
- break;
- case 3:
- list();
- break;
- default:
- printf("輸入錯誤!任意鍵返回!");
- getch();
- list();
- }
- }
- void re_num()
- {
- int i,find,j;
- system("cls");
- printf("按學號刪除學生信息: \n\n");
- printf("請輸入要刪除的學生的學號: ");
- scanf("%d",&find);
- for (i=0;i<count;i++)
- {
- if (stu[i].num==find)
- {
- j=1;
- k=i;
- avg=stu[i];
- break;
- }
- else
- continue;
- }
- if (j!=1)
- {
- printf("您所刪除的學生不存在!任意鍵返回主菜單!");
- getch();
- list();
- }
- else
- for (i=k;i<count-1;i++)
- {
- stu[i]=stu[i+1];
- }
- printf("刪除成功!任意鍵返回主菜單!");
- count--;
- getch();
- list();
- }
- void re_name()
- {
- int i,j,m;
- char find[20];
- system("cls");
- printf("按姓名刪除學生信息: \n\n");
- printf("請輸入要刪除的學生的姓名: ");
- scanf("%s",find);
- for (i=0;i<count;i++)
- {
- m=strcmp(find,stu[i].name);
- if (m==0)
- {
- j=1;
- k=i;
- avg=stu[i];
- break;
- }
- else
- continue;
- }
- if (j!=1)
- {
- printf("您所刪除的學生不存在!任意鍵返回主菜單!");
- getch();
- list();
- }
- else
- for (i=k;i<count-1;i++)
- {
- stu[i]=stu[i+1];
- }
- printf("刪除成功!任意鍵返回主菜單!");
- count--;
- getch();
- s();
- }
- void renew()
- {
- int select;
- system("cls");
- printf("恢復學生信息: \n\n\n");
- printf("\t\t\t1.按學號恢復\n\n\t\t\t2.按姓名恢復\n\n\t\t\t3.返回\n\n");
- printf("請選擇: ");
- scanf("%d",&select);
- switch(select)
- {
- case 1:
- renew_num();
- break;
- case 2:
- renew_name();
- break;
- case 3:
- list();
- break;
- default:
- printf("輸入錯誤!任意鍵返回!");
- getch();
- list();
- }
- }
- void renew_num()
- {
- int i,del;
- system("cls");
- printf("請輸入要恢復的學生的學號: ");
- scanf("%d",&del);
- if (del==avg.num)
- {
- for (i=k;i<count;i++)
- {
- stu[i+1]=stu[i];
- stu[i]=avg;
- break;
- }
- }
- else
- {
- printf("您要恢復的學生不存在,任意鍵返回主菜單!");
- getch();
- list();
- }
- count++;
- printf("恢復成功!");
- getch();
- list();
- }
- void renew_name()
- {
- int i,j;
- char del[20];
- system("cls");
- printf("請輸入要恢復的學生的姓名: ");
- scanf("%s",del);
- j=strcmp(del,avg.name);
- if (j==0)
- {
- for (i=k;i<count;i++)
- {
- stu[i+1]=stu[i];
- stu[i]=avg;
- break;
- }
- }
- else
- {
- printf("您要恢復的學生不存在,任意鍵返回主菜單!");
- getch();
- list();
- }
- count++;
- printf("恢復成功!");
- getch();
- list();
- }
復制代碼 |