📄 stu.c
字号:
#include <stdio.h>
#include <math.h>
#include <string.h>
/*******************************************************/
struct student
{
char StuCode[10];
char StuName[20];
char subject[20];
int StuScore;
}stu[100];/*定义全局数组*/
/************************************************************/
void ShowMenu(); /*显示主菜单*/
void save(int i); /*保存所做的更改*/
int read()/*读取文件*/
{ FILE *fp;
int i=-1;
fp=fopen("d:\\score.txt","r");
if(fp==NULL){printf("Can't open file\n");exit();}
while(feof(fp)==0)
{
i++;
fscanf(fp,"\n%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,&stu[i].StuScore);
}
fclose(fp);
return i;
}
int find(char md[],int i)/*按学生学号查找学生*/
{
printf("finding now,please wait for a while.....\n");
while(abs(strcmp(stu[i].StuCode,md)&&(i>=0))) i--;
if(i<0) {printf("Can't find it\n");return i=-1;}
else {printf("Have finded it %d\n",i);
printf("%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,stu[i].StuScore);return i;}
}
void output(int x);
void swap(int i,int j);
void ShowMT();
void ShowCMT();
void SelectCM();
void Add();
void Modify();
void Delete();
/*******************************************************/
void ShowST(); /*显示系统统计菜单*/
/*******************************************************/
void ShowSort(); /*显示系统排序菜单*/
void ShowSoC(); /*显示系统排序子菜单*/
void ShowSoRe(); /*显示排序结果*/
void Sort(char *p); /*排序*/
/*******************************************************/
void main() /*程序主函数*/
{
char a;
ShowMenu();
scanf("%c",&a);
while(1)/*程序循环*/
{
switch(a)
{
case '1':
ShowMT();ShowMenu(); break; /*显示系统维护菜单*/
case '2':
ShowST(); ShowMenu(); break; /*显示系统统计菜单*/
case '3':
ShowSort();ShowMenu(); break; /*显示系统排序菜单*/
case '4':
exit(); break; /*退出程序,中止运行*/
/*default:
ShowError();break;*/
}
scanf("%c",&a);
}
}
void ShowMenu()/*主菜单*/
{
clrscr();
printf("Welcome to use Score of Student Management system\n\n");
printf("This Is Main Menu.Please Select:\n");
printf("****************************************************************\n\n");
printf("* 1 To Maintain Score of Student Please To Input: 1 *\n\n");
printf("* 2 To Statistic Score of Student Please To Input: 2 *\n\n");
printf("* 3 To Sort Score of Student Please To Input: 3 *\n\n");
printf("* 4 To Exit System of Management Please To Input: 4 *\n\n");
printf("****************************************************************\n\n");
printf("To Press \'Enter\' Key After Please To Input Num.:\n");
}
void ShowError()
{
printf(" ERROR!!!! ERROR!!!! Please Select Again.\n");
printf("To Press \'Enter\' Key After Please To Input Num.:\n");
}
void ShowMT()/*维护菜单*/
{
ShowCMT();
SelectCM();
}
void ShowCMT()/*维护菜单设计*/
{
clrscr();
printf("Welcome to use Score of Student Management system\n\n");
printf("This Is Maintain Page. Please Input Number and Select :\n");
printf("***************************************************************\n\n");
printf("* 1 To ADD Item Please To Input: 1 *\n\n");
printf("* 2 To MODIFY Item Please To Input: 2 *\n\n");
printf("* 3 To DELETE Item Please To Input: 3 *\n\n");
printf("* 4 To RETURN Menu of System Please To Input: 4 *\n\n");
printf("* 5 To EXIT System Please To Input: 5 *\n\n");
printf("***************************************************************\n\n");
printf("To Press \'Enter\' Key After Please To Input Num.:\n");
}
void SelectCM()/*维护子菜单的循环*/
{
char b;
b=getchar();
while(b!='4')
{
switch(b)
{
case 49:
Add(); ShowCMT(); printf("Add Student Successed!!!!\n"); break;
case 50:
Modify(); ; ShowCMT(); printf("Modify Successed!!!!\n"); break;
case 51:
Delete(); ShowCMT() ; printf("Delete Successed!!!!\n"); break;
case 53:
exit(); break;
}
b=getchar();
}
}
void Add()/*添加学生记录*/
{
int *m;
int i=0;
clrscr();
printf("If you want to exit this process,Please Input '$'\n");
printf("Please Input Student code name subject score:\n");
scanf("%s",stu[i].StuCode);
if(abs(strcmp(stu[i].StuCode,"$")))
{
scanf("%s%s%d",stu[i].StuName,stu[i].subject,&stu[i].StuScore);
}
else ShowCMT();
while(abs(strcmp(stu[i].StuCode,"$")))
{
i++;
scanf("%s",stu[i].StuCode);
if(abs(strcmp(stu[i].StuCode,"$")))
{
scanf("%s%s%d",stu[i].StuName,stu[i].subject,&stu[i].StuScore);
}
}
save(i);
}
void Modify() /*修改学生记录*/
{
int m,i,n;
char ch[10];
FILE *fp;
m=read();
n=m;
printf("if you want to exit this modify process,please input \'$\'\n");
printf("Please Input Student\' Code who want to modify\n");
scanf("%s",ch);
while(abs(strcmp(ch,"$")))
{
i=find(ch,m);
printf("Please Input This Student \'code name subject score\' again\n");
scanf("%s%s%s%d",stu[i].StuCode,stu[i].StuName,stu[i].subject,&stu[i].StuScore);
printf("\n%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,stu[i].StuScore);
printf("Please Input Student\' Code who want to modify\n");
scanf("%s",ch);
}
fp=fopen("d:\\score.txt","w");
if(fp==NULL) {printf("Open file Error");exit();}
while(n>=0)
{
printf("\n%10s%10s%10s%10d\n",stu[n].StuCode,stu[n].StuName,stu[n].subject,stu[n].StuScore);
fprintf(fp,"\n%10s%10s%10s%10d\n",stu[n].StuCode,stu[n].StuName,stu[n].subject,stu[n].StuScore);
n--;
}
fclose(fp);
}
void Delete()
{
int m,i,n;
char ch[10];
FILE *fp;
m=read();
n=m;
printf("if you want to exit this Delete process,please input \'$\'\n");
printf("Please Input Student\' Code who want to Delete\n");
scanf("%s",ch);
while(abs(strcmp(ch,"$")))
{
i=find(ch,m);
while(i<=n)/*删除找到的学生内容*/
{
strcpy(stu[i].StuCode,stu[i+1].StuCode);
strcpy(stu[i].StuName,stu[i+1].StuName);
strcpy(stu[i].subject,stu[i+1].subject);
stu[i].StuScore=stu[i+1].StuScore;
i++;n--;
}
printf("Please Input Student\' Code who want to Delete\n");
scanf("%s",ch);
}
fp=fopen("d:\\score.txt","w");
if(fp==NULL) {printf("Open file Error");exit();}
while(n>=0)
{
printf("\n%10s%10s%10s%10d\n",stu[n].StuCode,stu[n].StuName,stu[n].subject,stu[n].StuScore);
fprintf(fp,"\n%10s%10s%10s%10d\n",stu[n].StuCode,stu[n].StuName,stu[n].subject,stu[n].StuScore);
n--;
}
fclose(fp);
}
/*******************************************************/
void ShowST()
{
int n,sum=0,m,top=0,low=0;int lowN=0,topN=0;char ch;
n=read();m=n;/*读出数据,并统计纪录数量*/
if(n<0) return;
/*求平均成绩,最高、低成绩,不及格、及格人数,不及格、及格学生的名单*/
low=stu[n].StuScore;
top=stu[n].StuScore;
for(;n>=0;n--)
{
sum=sum+stu[n].StuScore;/*统计整体总分分数*/
if(stu[n].StuScore>top) top=stu[n].StuScore;/*记录最高分*/
if(stu[n].StuScore<low) low=stu[n].StuScore;/*记录最低分*/
}
printf("****************************************************************\n");
printf("Aveage Score is :%f\n\n",(float)(sum/m));/*输出平均分*/
printf("The most top score is :%5d\n\n",top);/*输出最高分*/
printf("The most low score is :%5d\n\n",low);/*输出最低分*/
n=m;
printf("Student of Top 60 score is:\n\n");
for(;n>=0;n--)
{
if(stu[n].StuScore>=60) {printf("%30s\n\n",stu[n].StuName);topN++;} /*统计及格人数及输出及格人数名单*/
}
printf("Student Number of above 60 score is : %6d\n\n",topN);/*输出及格人数*/
n=m;
printf("Student of below 60 score is:");
for(;n>=0;n--)
{
if(stu[n].StuScore<60){printf("%10s\n\n",stu[n].StuName);lowN++;}/*统计不及格人数及名单*/
}
printf("Student Number of below 60 score is : %6d\n",lowN);/*输出不及格人数*/
printf("Please input \'$\' to show Main Menu\n\n");
ch=getchar();
while(ch!='$') ch=getchar();
}
/********************************************************/
void ShowSort()
{
ShowSoC();
ShowSoRe();
}
void ShowSoC()
{
clrscr();
printf("Welcome to use Score of Student Management system\n\n");
printf("This Is Sorting Page. Please Input Number and Select :\n");
printf("****************************************************************\n\n");
printf("* 1 According to Code of Student Please To Input: 1 *\n\n");
printf("* 2 According to Score of Student Please To Input: 2 *\n\n");
printf("* 3 According to Subject of Student Please To Input: 3 *\n\n");
printf(" 4 Show Sort Menu again, Please To Input: 4 *\n\n");
printf("****************************************************************\n\n");
printf("Want to Exit this Sort Process,please input \'$\'\n");
printf("To Press \'Enter\' Key After Please To Input Num.:\n");
}
void ShowSoRe()
{
char c;char *p;
c=getchar();
while(c!='$')
{
switch(c)
{
case '1':
p="code"; Sort(p);break;
case '2':
p="score"; Sort(p);break;
case '3':
p="subject"; Sort(p);break;
case '4':
ShowSoC(); break;
}
c=getchar();
}
}
void Sort(char *p)
{
int n,m,j,i;
n=read(); m=n;
if(!abs(strcmp(p,"code")))
{
for(;n>=0;n--)
{
i=n;
for(j=1;j<=n;j++)
{
if(strcmp(stu[i].StuCode,stu[i-j].StuCode)<0)
{
swap(i,j);
}
}
}
printf("Student Code Sorted:\n");
output(m);
}
if(!abs(strcmp(p,"score")))
{
for(;n>=0;n--)
{
i=n;
for(j=1;j<=n;j++)
{
if(stu[i].StuScore<stu[i-j].StuScore)
{
swap(i,j);
}
}
}
printf(" Score Sorted:\n");
output(m);
}
if(!abs(strcmp(p,"subject")))
{
for(;n>=0;n--)
{
i=n;
for(j=1;j<=n;j++)
{
if(strcmp(stu[i].subject,stu[i-j].subject)<0)
{
swap(i,j);
}
}
}
printf(" Subject Sorted:\n");
output(m);
}
}
void save(int i)
{
FILE *fp;
fp=fopen("d:\\score.txt","a+");
if(fp==NULL) {printf("Open file Error");exit();}
while(i>0)
{
i--;
printf("\n%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,stu[i].StuScore);
fprintf(fp,"\n%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,stu[i].StuScore);
}
fclose(fp);
printf("Save Successed!!!");
}
void output(int m)
{
int i=0;
while(i<=m)
{
printf("\n%10s%10s%10s%10d\n",stu[i].StuCode,stu[i].StuName,stu[i].subject,stu[i].StuScore);
i++;
}
}
void swap(int i,int j)
{
struct student student;
strcpy(student.StuCode,stu[i-j].StuCode); strcpy(student.StuName,stu[i-j].StuName);
strcpy(student.subject,stu[i-j].subject); student.StuScore=stu[i-j].StuScore;
strcpy(stu[i-j].StuCode,stu[i].StuCode); strcpy(stu[i-j].StuName,stu[i].StuName);
strcpy(stu[i-j].subject,stu[i].subject); stu[i-j].StuScore=stu[i].StuScore;
strcpy(stu[i].StuCode,student.StuCode); strcpy(stu[i].StuName,student.StuName);
strcpy(stu[i].subject,student.subject); stu[i].StuScore=student.StuScore;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -