//為什么我輸入1再輸入3,輸入1?1?1回車3?3?3回車2?2?2后輸入5輸入1之后并沒有進行按照學號升序排列?
#include?<stdio.h>
#include?<stdlib.h>
#include?<string.h>
#include?<conio.h>
int?main_menu();????????????//主界面
int?menu_5();???????????????//輸入'5'時的界面
void?overview();????????????//實現全覽功能的函數
void?ID_select();???????????//按學號順序
int?menu_6();???????????????//輸入'6'時的界面
void?statistics();??????????//實現統計功能的函數
void?add();?????????????????//學生成績新增
void?mark_statistics();?????//成績分布統計
//定義學生結構體
struct?Student
{
????char?ID[20];
????char?Name[20];
????int?Mark;
};
//聲明學生數組及學生數量
struct?Student?students[1000];
int?num=0;
int?main()
{
????char?ch;
????while(1)
????{
????????switch(main_menu())??????????//獲取main_menu()函數輸入的數據
????????{
????????????case?1:
????????????????system("CLS");
????????????????add();
????????????????break;
????????????case?2:
????????????????system("CLS");
????????????????printf("\n查詢學生成績信息功能待完成!\n");
????????????????//以后版本插入函數??check()
????????????????break;
????????????case?3:
????????????????system("CLS");
????????????????printf("\n修改學生成績信息功能待完成!\n");
????????????????//以后版本插入函數??revise()
????????????????break;
????????????case?4:
????????????????system("CLS");
????????????????printf("\n刪除學生成績信息功能待完成!\n");
????????????????//以后版本修改函數??deleted()
????????????????break;
????????????case?5:
????????????????//system("CLS");
????????????????overview();
????????????????break;
????????????case?6:
????????????????system("CLS");
????????????????statistics();
????????????????break;
????????????case?0:
????????????????system("CLS");
????????????????printf("\n確認退出系統?(Y/N)?");
????????????????scanf("?%c",&ch);
????????????????if?(ch?==?'Y'||ch?==?'y')
????????????????{
????????????????????return?0;
????????????????}
????????????????else?if?(ch?==?'N'||ch?==?'n')
????????????????{
????????????????????return?main();
????????????????}
????????}
????}
????return?0;
}
//主界面函數
int?main_menu()
{
????char?ch;
????do
????{
????printf("-----?學生成績管理系統?V2.0?-----\n");
????printf("\t1.?學生成績新增\n");
????printf("\t2.?學生成績查詢\n");
????printf("\t3.?學生成績修改\n");
????printf("\t4.?學生成績刪除\n");
????printf("\t5.?班級成績全覽\n");
????printf("\t6.?班級成績統計\n");
????printf("\t0.?退出\n");
????printf("輸入?:?\n");
????ch?=?getch();
????if(ch?<?'0'||ch?>?'7')??????????//判斷輸入錯誤
????{
????????printf("\n?error!\n");
????????return?(ch?-?48);
????}
????}while(ch?<?'0'||ch?>?'7');
????return?(ch?-?48);
}
//學生成績新增
void?add()
{
????int?i;
????system("CLS");
????printf("請輸入班級人數:?");
????scanf("%d",&num);
????printf("請輸入每個學生學號、姓名及成績\n");
????for(i?=?0;i?<?num;i++)
????{
????????scanf("%s%s%d",students[i].ID,students[i].Name,&students[i].Mark);
????}
????printf("成績錄入已完成!\n");
}
//輸入'5'時的界面
int?menu_5()
{
????char?ch;
????do{
????printf("\t1---按學號順序瀏覽\n");
????printf("\t2---按成績排名瀏覽\n");
????printf("\t0---返回上一級\n");
????printf("輸入?:?\n");
????ch?=?getch();
????}while(ch?<?'0'||ch?>?'2');
????return?(ch?-?48);
}
//實現全覽功能的函數
void?overview()
{
????system("CLS");
????char?ch?=?0;
????do{
????????switch(menu_5())
????????{
????????case?0:
????????????system("CLS");
????????????return;
????????case?1:
????????????printf("按學號順序成績列表如下:\n");
????????????ID_select();
????????????break;
????????case?2:
????????????system("CLS");
????????????printf("按成績順序瀏覽成績功能待完成!\n");
????????????break;
????????}
???????}while(ch?<?'0'||ch?>?'2');
???????return;
}
//按學號順序
void?ID_select()
{
????int?i,j;
????struct?Student?t;???????????//中間變量t
????for(i?=?0;i?<?num;i++)
????{
????????for(j?=?0;j?<?num-1;j++)
????????{
????????????if?(students[j-1].ID>students[j].ID)
????????????{
????????????????t?=?students[j-1];
????????????????students[j-1]?=?students[j];
????????????????students[j]?=?t;
????????????}
????????}
????????printf("%s?%s?%d\n",students[i].ID,students[i].Name,students[i].Mark);
????}
}
//輸入'6'時的界面
int?menu_6()
{
????char?ch;
????do{
????????system("CLS");
????????printf("\t1----成績分布統計\n");
????????printf("\t2----統計不及格人數及名單\n");
????????printf("\t3----統計優秀人數及名單\n");
????????printf("\t4----統計及格人數及名單\n");
????????printf("\t0----返回上一級\n");
????????printf("輸入?:?");
????????ch?=?getch();
????}while(ch?<?'0'||ch?>?'4');
????return?(ch?-?48);
}
//實現統計功能的函數
void?statistics()
{
????system("CLS");
????char?ch?=?0;
????do{
????????switch(menu_6())
????????{
????????case?0:
????????????system("CLS");
????????????return;
????????case?1:
????????????mark_statistics();
????????????break;
????????case?2:
????????????system("CLS");
????????????printf("功能待完成!\n");
????????????break;
????????case?3:
????????????system("CLS");
????????????printf("功能待完成!\n");
????????????break;
????????case?4:
????????????system("CLS");
????????????printf("功能待完成!\n");
????????????break;
???????}
???????}while(ch?<?'0'||ch?>?'4');
}
//成績分布統計
void?mark_statistics()
{
????int?fail=-1;??????????????//不及格
????int?pass=0;???????????????//及格
????int?secondary=0;??????????//中等
????int?good=0;???????????????//良好
????int?excellent=0;??????????//優秀
????int?i;
????double?ratio_1,ratio_2,ratio_3,ratio_4,ratio_5;
????printf("成績分布如下?:\n");
????printf("總人數\t不及格\t及格\t中等\t良好\t優秀\n");
????for(i?=?0;i?<=?num;i++)
????{
????????if(students[i].Mark?<?60?&&?students[i].Mark?>=?0)
????????????fail++;
????????else?if(students[i].Mark?>=?60?&&?students[i].Mark?<?70)
????????????pass++;
????????else?if(students[i].Mark?>=?70?&&?students[i].Mark?<?80)
????????????secondary++;
????????else?if(students[i].Mark?>=?80?&&?students[i].Mark?<?90)
????????????good++;
????????else?if(students[i].Mark?>=?90?&&?students[i].Mark?<=?100)
????????????excellent++;
????}
????ratio_1?=?(double)fail/num*100;
????ratio_2?=?(double)pass/num*100;
????ratio_3?=?(double)secondary/num*100;
????ratio_4?=?(double)good/num*100;
????ratio_5?=?(double)excellent/num*100;
????printf("%d\t%d\t%d\t%d\t%d\t%d\n",num,fail,pass,secondary,good,excellent);
????printf("比例:\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\n",ratio_1,ratio_2,ratio_3,ratio_4,ratio_5);
????getch();
}
- 1 回答
- 2 關注
- 1235 瀏覽
添加回答
舉報
0/150
提交
取消