#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
#include<windows.h>
#define?N?100
typedef?struct?student{
char?num[13];//字符數組記錄學號
char?name[20];//
float?math;
float?english;
float?cprogram;//c程序
float?culture;//文化課成績
float?average;//平均成績
float?score[4];//用數組記錄成績,后面在函數中在看
}jibenxingxi;//定義結構體變量的類型名為jjibenxingxi
//
void?mainprint();//打印主界面
void?scoreInput();//成績錄入
void?scoreStat();//成績統計系統
void?studentStatus();//學生管理功能界面
void?bukao();?????????/*生成并打印補考通知單*/????????????????????????????????????????????
void?sortAnhao();????/*按學號排序*/?????????????
void?jisuanPingjun();/*計算平均分并排序*/?????????????
void?tongjiFenshu();?/*統計分數段*/??????
void?outdanke();?//輸出單科成績
void?qitafunction();//
void?findstudent();//查找學生
//
void?main()
{
char?choose='\0',yes_no='\0';
do
{
system("color?4f");
system("cls");
mainprint();
printf("?????????????????????????????");
choose=getch();
switch(choose)
{
case?'1':scoreInput();?break;//成績錄入
case?'2':scoreStat();?break;
case?'3':studentStatus();?break;
case?'4':qitafunction();?break;
case?'0':?break;
default:printf("???你所輸入的選項非法\n");
}
if(choose=='0')?break;
printf("??????????????????????????即將進入主菜單,要繼續選擇嗎(Y/N)?\n");
do
{
yes_no=getch();
}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
}while(yes_no=='Y'||yes_no=='y');
}
void?mainprint()
{
printf("????????????????????????|******************************************|\n");?
printf("????????????????????????|??????????歡迎使用學籍管理系統????????????|\n");
printf("????????????????????????|******************************************|\n");
printf("????????????????????????|????????????請輸入選項編號(0~4)???????????|\n");
printf("????????????????????????|------------------------------------------|\n");
printf("????????????????????????|??????????????1--錄入成績?????????????????|\n");
printf("????????????????????????|??????????????2--統計成績?????????????????|\n");
printf("????????????????????????|??????????????3--處理學籍?????????????????|\n");
printf("????????????????????????|??????????????4--創新功能?????????????????|\n");
printf("????????????????????????|??????????????0--??退出???????????????????|\n");?
printf("????????????????????????|------------------------------------------|\n");
}
void?scoreInput()
{
int?i=0;
char?yes_no='\0';//
jibenxingxi?stu[N]={0};
FILE?*fp=NULL;
system("color?5f");//頭文件windows中的函數,調用DOS命令,5f,中間5代表設置背景顏色,f代表前景顏色(字體顏色)
system("cls");//頭文件windows中的函數,清屏
fp=fopen("d:\\學生基本信息.txt","w");//以寫入的方式打開文件d:\\學生基本信息.txt
if(fp==NULL)?
{
printf("????打開文件失敗!\n");
return;
}
printf("\n歡迎進入成績錄入系統\n");
printf("請輸入第%d個記錄:\n",i+1);
puts("請輸入學生學號:(用#結束程序)\n");
scanf("%s",stu[i].num);
puts("請輸入學生姓名:(用#結束程序)\n");
scanf("%s",stu[i].name);
puts("請依次輸入學生的數學、英語、編程、文化課成績:\n");
scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
while(strcmp(stu[i].num,"#")&&strcmp(stu[i].name,"#"))//字符數組比較函數,如果字符相等,則返回0,即跳出循環
{
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu[i].num,stu[i].name,stu[i].math,
stu[i].english,stu[i].cprogram,stu[i].culture);//賦值給結構體變量,且把結構體變量寫入文件
i++;
printf("請輸入第%d個記錄",i+1);
puts("請輸入學生學號:(用#結束程序)\n");
scanf("%s",stu[i].num);
puts("請輸入學生姓名:(用#結束程序)\n");
scanf("%s",stu[i].name);
puts("請依次輸入學生的數學、英語、編程、文化課成績:\n");
scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
}
fclose(fp);
}
//
void?scoreStat()
{
char?choose='\0',yes_no='\0';
system("color?6f");
do
{
system("cls");
printf("歡迎進入成績統計系統\n");
printf("\n?????????????????????????????????|------------------------|");
printf("\n?????????????????????????????????|????請輸入選項編號(0~4)?|");
printf("\n?????????????????????????????????|------------------------|");
printf("\n?????????????????????????????????|??????1--按學號排序?????|");
printf("\n?????????????????????????????????|??????2--按平均分數排序?|");
printf("\n?????????????????????????????????|??????3--統計分數段?????|");
printf("\n?????????????????????????????????|??????4--返回???????????|");
printf("\n?????????????????????????????????|??????0--退出系統???????|");
printf("\n?????????????????????????????????|------------------------|\n");
choose=getch();
switch(choose)
{
case?'1':sortAnhao();
case?'2':jisuanPingjun();
case?'3':tongjiFenshu();
case?'4':main();
case?'0':break;
default:printf("???????這是一個非法選項!");break;
}
if(choose==0)?break;
printf("?????要繼續選擇嗎?(Y/N)");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='y'||yes_no=='Y');
}
//
void?studentStatus()
{
char?choose='\0',yes_no='\0';
jibenxingxi?stu[N]={0};
FILE?*fp=NULL;
fp=fopen("d:\\學生基本信息.txt","r");
if(fp==NULL)
{printf("文件打開失?。?);?return;?}
system("color?2f");
do
{
system("cls");
printf?("?????????????????|---------------------------------------|\n");
printf?("?????????????????|???請輸入選項編號(0-3)?????????????????|\n");
printf?("?????????????????|---------------------------------------|\n");
printf?("?????????????????|???1----------生成并打印補考通知單?????|\n");
printf?("?????????????????|???2----------查找學生?????????????????|\n");
printf?("?????????????????|???3----------輸出單科成績?????????????????|\n");
printf?("?????????????????|???4----------返回?????????????????????|\n");
printf?("?????????????????|???0----------退出系統?????????????????|\n");
printf?("?????????????????|---------------------------------------|\n");
choose=getche();
while(choose!='0'&&choose!='1'&&choose!='2'&&choose!='3'&&choose!='4')
????????{
printf("??????????????????%c為非法選項!請重新輸入:",choose);
choose=getchar();
}
switch(choose)
{
case?'1':bukao();?break;
case?'2':findstudent();?break;
case?'3':outdanke();?break;
case?'4':main();?break;
case?'0':break;
}
if(choose==0)
{
printf("\n");
printf("感謝您的使用!\n");
break;
}
printf("要繼續選擇嗎?(Y/N)\n");
do
{
yes_no=getch();
}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
}while(yes_no=='y'||yes_no=='Y');
}
void?findstudent()
{
int?i=0,j=0,count=0,n=0,t=0;
char?ch[20]="",yes_no='\0';
struct?student?stu[N]={0};
FILE?*fp=NULL;
fp=fopen("d:\\學生基本信息.txt","r");
if(fp==NULL)
{
printf("\n?打開文件失??!\n");??return;?
}
while(feof(fp)==0)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu[i].num,
stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
i++;
n++;
}
fclose(fp);
do
{?
system("color??8f");
system("cls");
printf("\n???????????????????歡迎進入查詢學生系統!\n");
printf("\n請輸入要查學的學生的姓名:");
scanf("%s",&ch);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,ch)==0)
{?
printf("\n????????您查詢的是學號為%s的學生,他的成績如下:",stu[i].num);
printf("\n????????高數:%7.1f,英語:%7.1f,c語言編程:%7.1f,亂七八遭:%7.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
break;
}
if(i>=n)
printf("\n??????????????????????查無此人.......\n");
printf("\n?????????????????要繼續選擇查詢學生嗎(Y/N)?\n");
do???
{
yes_no=getche();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='y'||yes_no=='Y');?
}???????????????????
void?sortAnhao()
{
int?k,i=0,j=0,n=0,t=0;
jibenxingxi?stu2[N]={0},temp={0};//temp是為了排序時與結構體變量值進行交換的中間變量
FILE?*fp=NULL;
system("color?9f");
fp=fopen("d:\\學生基本信息.txt","r");
if(fp=NULL)
{printf("文件打開失?。n");?return;}
printf("歡迎進入按學號排序系統\n");
for(i=0;feof(fp)==0;i++)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu2[i].num
,stu2[i].name,&stu2[i].math,&stu2[i].english,&stu2[i].cprogram,&stu2[i].culture);
}
fclose(fp);?
for(j=0;j<i-2;j++)//選擇法排序
{
k=j;
for(n=j+1;n<i-1;n++)
{
if(strcmp(stu2[j].num,stu2[n].num)>0)
k=n;
}
temp=stu2[j];
stu2[j]=stu2[k];
stu2[k]=temp;
}
fp=fopen("d:\\按學號排序.txt","w");
if(fp=NULL)
{printf("文件打開失敗");?return;}
fprintf(fp,"序號????學號??????姓名????????高數??????英語??????C語言??????亂七八糟\n");
for(j=0;j<i;j++)
{
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",j+1,stu2[j].num
,stu2[j].name,stu2[j].math,stu2[j].english,stu2[j].cprogram,stu2[j].culture);
}
printf("????????文件已保存至D:\\按學號排序.txt");
fclose(fp);
}????????
void?jisuanPingjun()
{
int?i,j=0,k,n;
jibenxingxi?stu3[N]={0},temp={0};
FILE?*fp=NULL;
system("color?9f");
fp=fopen("d:\\學生基本信息.txt","r");
if(fp==NULL)
{printf("文件打開失敗\n");?return;}
printf("歡迎進入按平均成績排序系統");
while(feof(fp)==0)
{
fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&i,stu3[i].num,
stu3[i].name,&stu3[i].math,&stu3[i].english,&stu3[i].cprogram,&stu3[i].culture);
i++;
}
for(j=0;j<i-1;j++)
stu3[j].average=(float)(stu3[j].math+stu3[j].english+stu3[j].cprogram+stu3[j].culture)/4;
//平均分不一定是整數,所以要強制轉換為浮點型變量
for(i=0;i<j;i++)//選擇法排序平均分,此時j記錄了有多少個人
{
k=i;
for(n=i+1;n<=j;n++)
{
if(stu3[k].average>stu3[n].average)
k=n;
}
temp=stu3[k];
stu3[k]=stu3[i];
stu3[i]=temp;
}
fp=fopen("d:\\按平均成績排序.txt","w");
if(fp==NULL)
{printf("文件打開失敗\n");?return;}
fprintf(fp,"序號???????學號????????姓名????????數學????????英語???????C語言??????亂七八糟????平均分\n");
for(i=0;i<=j;i++)
fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu3[i].num
,stu3[i].name,stu3[i].math,stu3[i].english,stu3[i].cprogram,stu3[i].culture,stu3[i].average);
printf("???文件已保存至D:\\按平均成績排序.txt\n");//把按平均成績排序的信息寫入文件
fclose(fp);
}
- 1 回答
- 0 關注
- 1558 瀏覽
添加回答
舉報
0/150
提交
取消