目录
正文
1. 简介
在本次作业中,我们开发了一个学生信息管理系统,采用逐个功能逐个开发的思路,实现了该系统录入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、学生信息排序、统计学生信息等功能(排序与统计以学生成绩为目标)。由于能力有限,本系统中仍存在部分bug(后续介绍),以及有一定的改进空间。
本系统数据文件须手动改名为“学生信息.txt“才能应用。
学 |——1.主菜单 |
生 |——2.录入学生信息 |
信 |——3.显示学生信息 |
息——|——4.查询学生信息 |————> main函数整合各项功能
管 |——5.修改学生信息 |
理 |——6.删除学生信息 |
系 |——7.学生信息排序 |
统 |——8.统计学生信息 |
2. 功能模块1:主菜单 开发
2.1 基本思路
按照学生信息管理系统的功能进行设计,利用printf函数将学生信息管理系统的功能设计成表格呈现出来,供使用者选择。
2.2 关键代码
void menu(){ //目录
printf("\n\n");
printf("\t\t||*****************************************||\n");
printf("\t\t|| ----------------------- ||\n");
printf("\t\t||*********学 生 信 息 管 理 系 统*********||\n");
printf("\t\t|| ----------------------- ||\n");
printf("\t\t|| 1.输入学生信息 ||\n");
printf("\t\t|| 2.显示学生信息 ||\n");
printf("\t\t|| 3.查询学生信息 ||\n");
printf("\t\t|| 4.修改学生信息 ||\n");
printf("\t\t|| 5.删除学生信息 ||\n");
printf("\t\t|| 6.学生信息排序 ||\n");
printf("\t\t|| 7.统计学生信息 ||\n");
printf("\t\t||请选择操作: ||\n");
printf("\t\t|| ||\n");
printf("\t\t||*****************************************||\n");
}
2.3 运行结果
![](https://img-blog.csdnimg.cn/img_convert/814196671e55b8f032a91b413f52cff8.png)
3. 功能模块2:录入学生信息开发
3.1 基本思路
首先定义一个结构体数组,以结构体形式储存学生信息,由于编译器的不同,有些编译器动态数组的实现较困难,因此结构体的大小我们采用宏定义。由于fwrite函数录入数据后记事本文件中不好直观地显示相关数据,因此我们选择fprintf函数录入数据。
3.2 关键代码
#define len10//可按需调整学生信息结构体的大小
——————————————————————————————————————————
struct student { //结构体形式储存学生信息
int num;
char name[10];
char xuehao[12];//学号统一为20开头的十位数
char sex[10];//男为M,女为W
int age;
char phone[16];
float Clange;
float Math;
float Eng;
float total;
float mean;
};
struct student stu[len];
——————————————————————————————————————————
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return ;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean); }
fclose(fp);//该部分代码用于导入数据,以后不再解释
——————————————————————————————————————————
for (i = 0;i <= len; i++) {
j = i;
if (stu[i].xuehao[0] != '2')
break;
}/*该部分代码用于寻找已有数据的数量,
如果len大于已有学生信息数,则从已有学生信息数的下一位开始输入,
若已有学生信息数已为结构体大小,输入无效*/
——————————————————————————————————————————
for (i = j; i < len; i++) {
stu[i].num = i + 1;
printf("正在输入第%d位学生的信息:\n", i + 1 );
printf("\t请输入姓名:");
scanf("%s",&stu[i].name);
printf("\t请输入学号:");
scanf("%s",&stu[i].xuehao);
printf("\t请输入性别:");
scanf("%s",&stu[i].sex);
printf("\t请输入年龄:");
scanf("%d",&stu[i].age);
printf("\t请输入联系方式:");
scanf("%s",&stu[i].phone);
printf("\t请输入C语言成绩:");
scanf("%f",&stu[i].Clange);
printf("\t请输入数学成绩:");
scanf("%f",&stu[i].Math);
printf("\t请输入英语成绩:");
scanf("%f",&stu[i].Eng);
stu[i].total = stu[i].Clange +stu[i].Math + stu[i].Eng;
stu[i].mean = stu[i].total / 3;
printf("\t总成绩:%.2f\n\t平均成绩:%.2f\n", stu[i].total, stu[i].mean);
printf("该学生信息保存成功\n");
if (i != len - 1) {
printf("是否继续录入:(yes/no)");
scanf("%s",&ch);
if (ch[0] == 'n'&& ch[1] == 'o')
break;}
——————————————————————————————————————————
if ((fp =fopen("学生信息.txt", "wb")) == NULL) {
return ;
}
for (i = 0; i < len; i++) {
fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
stu[i].age, stu[i].phone,
stu[i].Clange,
stu[i].Math,
stu[i].Eng, stu[i].total, stu[i].mean);
}
fclose(fp);//以记事本形式保存输入的学生信息,以后不再列出
3.3 运行结果
没有数据:
![](https://img-blog.csdnimg.cn/img_convert/03075a956f85d1409ff2b6dc376aa969.png)
有一定的数据:
![](https://img-blog.csdnimg.cn/img_convert/56c70316f2bacc3de0431bb90967828d.png)
![](https://img-blog.csdnimg.cn/img_convert/3966871438610f52f87cfdf346a4f7ad.png)
数据存满结构体数组:
![](https://img-blog.csdnimg.cn/img_convert/0b7d9a03ff95560afae0d468525c7576.png)
![](https://img-blog.csdnimg.cn/img_convert/7621c5fc295f12ea18333399bfca94b5.png)
4. 功能模块3:显示学生信息开发
4.1 基本思路
将文件中的数据导入结构体数组从而显示所有学生信息。
4.2 关键代码
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i = 0; i < len; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
4.3 运行结果
![](https://img-blog.csdnimg.cn/img_convert/d71a580d34a1184e4964d6a0628a44df.png)
5. 功能模块4:查询学生信息开发
5.1 基本思路
以学号在系统中搜索目标学生,如搜索到即显示目标学生信息。
5.2 关键代码
char Xuehao[10];
printf("请输入学号:");
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] ==stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
break;
}
temp = 0;
}
if (i == len )
printf("未搜索到目标学生信息");
}
5.3 运行结果
由于数据类别过多,“总成绩”与“平均成绩”在窗口运行界面下会出现显示错误
![](https://img-blog.csdnimg.cn/img_convert/985e0d9dda232493e9febea88f9591f3.png)
![](https://img-blog.csdnimg.cn/img_convert/8f40ade6715a719c60a5755c8c7bb437.png)
6. 功能模块5:修改学生信息开发
6.1 基本思路
以学号在系统中搜索目标学生,如搜索到则进一步确定需要修改的信息,如果需要修改的信息为某一科目的成绩,则系统自动修改总成绩与平均成绩。
6.2 关键代码
int i, j,temp = 0, t, age;
char Xuehao[10];
char Name[10], xueHao[12], Phone[16],sex[10];
float clange, math, eng, Total, Mean;
printf("请输入学号:");//学号查找目标学生信息
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] ==stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
printf("请选择需要修改的信息:\n");
printf("1.姓名 2.学号 3.性别 4.年龄 5.联系方式 6.C语言成绩 7.数学成绩 8.英语成绩\n");
while(scanf("%d", &t)) {
if (t == 0)
break;
switch (t) {
case1:
printf("将该生姓名修改为:\n");
scanf("%s",&Name);
strcpy(stu[i].name,Name);
break;
case2:
printf("将该生学号修改为:\n");
scanf("%s",&xueHao);
strcpy(stu[i].xuehao,xueHao);
break;
case3:
printf("将该生性别修改为:\n");
scanf("%s",&sex);
strcpy(stu[i].phone,sex);
break;
case4:
printf("将该生年龄修改为:\n");
scanf("%d",&age);
stu[i].age= age;
break;
case5:
printf("将该生联系方式修改为:\n");
scanf("%s",&Phone);
strcpy(stu[i].phone,Phone);
break;
case6:
printf("将该生C语言成绩修改为:\n");
scanf("%f",&clange);
stu[i].Clange= clange;
break;
case7:
printf("将该生数学成绩修改为:\n");
scanf("%f",&math);
stu[i].Math= math;
break;
case8:
printf("将该生英语成绩修改为:\n");
scanf("%f",&eng);
stu[i].Eng= eng;
break;
default:
printf("选择错误,请重新选择(1-8):\n");
break;
}
printf("修改成功,是否需要继续修改(否请输入0,是请输入对应的数字1-8):\n");
}
Total = stu[i].Clange +stu[i].Math + stu[i].Eng;
Mean = Total / 3;
stu[i].total = Total;//系统自动修正总成绩与平均成绩
stu[i].mean = Mean;}}//录入文件代码不再列出
if (i ==len )
printf("未搜索到目标学生信息\n");
6.3 运行结果
![](https://img-blog.csdnimg.cn/img_convert/f879220d0433829ecb3aa25d6c3878f0.png)
![](https://img-blog.csdnimg.cn/img_convert/f647665275c9c48526870e87108baf11.png)
![](https://img-blog.csdnimg.cn/img_convert/517c135ecc3429da4c68b8d7c4984e31.png)
7. 功能模块6:删除学生信息开发
7.1 基本思路
以学号在系统中搜索目标学生,如搜索到则进一步确定是否删除目标学生的所有信息。
7.2 关键代码
int i, j,k, temp = 0;
char Xuehao[10], ch[4];
printf("请输入学号:");//学号查找目标学生信息
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] ==stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
printf("确定删除该学生信息?(yes/no)\n");
scanf("%s",&ch);
if (ch[0] == 'n'&& ch[1] == 'o') {
break;
}
for (j = i; j < len;j++) {
for (k = 0; k< 10; k++)
stu[j].name[k]= stu[j + 1].name[k];
for (k = 0; k< 12; k++)
stu[j].xuehao[k]= stu[j + 1].xuehao[k];
for (k = 0; k< 16; k++)
stu[j].phone[k]= stu[j + 1].phone[k];
for (k = 0; k< 10; k++)
stu[j].sex[k]= stu[j + 1].sex[k];
stu[j].age =stu[j + 1].age;
stu[j].Clange= stu[j + 1].Clange;
stu[j].Math =stu[j + 1].Math;
stu[j].Eng =stu[j + 1].Eng;
stu[j].total =stu[j + 1].total;
stu[j].mean =stu[j + 1].mean;
}//录入代码在此省略
printf("删除成功\n");
break;
}
temp = 0;
}
if (i == len)
printf("未搜索到目标学生信息\n");
7.3 运行结果
![](https://img-blog.csdnimg.cn/img_convert/0fe364e75924e3f9bf2f9b2686be8311.png)
![](https://img-blog.csdnimg.cn/img_convert/7c3f582dcd3aa15fcc032713b6f9bcb1.png)
![](https://img-blog.csdnimg.cn/img_convert/d8c036375e1d2ac497c0b00838cfb963.png)
8. 功能模块7:学生信息排序开发
8.1 基本思路
利用qsort函数,依据使用者的需求对所有学生信息根据各科成绩或总成绩进行总体的升序或降序排序。
8.2 关键代码
int uptotal(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p1->total - p2->total);
}
---
int downtotal(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p2->total - p1->total );
}//以上为qsort函数中最后一项参数所指代函数的编写,仅列此一例
---
int i, j,tem;
for (i = 0;i < len; i++) {
if (stu[i].xuehao[0] != '2')
break;
tem = i + 1;
}//找到已有数据的大小—tem
int o, p;
printf("请选择排序依据(输入对应的数字):1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩/平均成绩\n");
scanf("%d", &o);
printf("请选择排序方式(输入对应的数字):1.升序 2.降序\n");
scanf("%d", &p);
struct student a;
switch (o) {//根据用户的选择实现不同的排序
case 1:
switch (p) {
case 1:
qsort(stu, tem, sizeof(stu[0]), upC);/*此处已经完成了排序,以下为相关成绩相同时,以学号大小进行排序的代码,由于篇幅以后省略此步骤*/
for (i= 0; i < len - 1; i++) {
if(stu[i].Clange == stu[i + 1].Clange) {
for (j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
case 2:
qsort(stu,tem, sizeof(stu[0]), downC);
break;
default:
printf("Wrong.\n");
break;
}
break;
case 2: //其余项与以上内容相似,由于篇幅问题不再展示,详情见完整代码
default:
printf("Wrong.\n");
break;
}
for (i = 0; i < len; i++) {
stu[i].num = i + 1;
}
//以下为排序后立即展示已排序学生信息的代码
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i = 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
printf("排序成功\n");//此系统会自动录入排序后信息,录入文件代码省略
8.3 运行结果(以英语成绩为例)
降序:
![](https://img-blog.csdnimg.cn/img_convert/7450a1cfabd771a3dccb61be4f09d753.png)
升序:
![](https://img-blog.csdnimg.cn/img_convert/c75d62d30e4e91aec29ebee283bdc5e8.png)
9. 功能模块8:统计学生信息开发
9.1 基本思路
导入学生信息后,统计并显示出某科目或总成绩及格/不及格、 优秀的学生列表以及相关人数与几率,或统计所有学生某科目/总成绩的平均成绩。
9.2 关键代码
int i, j,tem;
for (i = 0;i < len; i++) {
if (stu[i].xuehao[0] != '2')
break;
tem = i + 1;
}
int o, p;
printf("请选择需要统计的数据:1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩(及格为180分及以上,优秀为255分及以上)\n");
scanf("%d", &o);
printf("请选择统计目标:1.及格学生 2.优秀学生 3.所有同学的平均成绩\n");
scanf("%d", &p);
int sum, m = 0, n = 0;
float yep, fal, TOL = 0; //符合/不合/所有学生总成绩
struct student stu1[len], stu2[len];
switch (o) {
case 1:
switch (p) {
case 1:
for (i= 0; i < tem; i++) {
if(stu[i].Clange >= 60) {
stu1[m]= stu[i];//定义另一个结构体数组存储及格学生信息
m++;
}else {
stu2[n]= stu[i];// 定义另一个结构体数组存储不及格学生信息
n++;
}
}
printf("\nC语言及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}//展示及格学生信息
printf("\nC语言不及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < n; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
stu2[i].sex, stu2[i].age,
stu2[i].phone,
stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
}//展示不及格学生信息
yep =((float)m / (float)tem ) * 100;//计算及格率
fal= n / tem ;
printf("\n一共%d位学生,C语言及格%d位学生,及格率%.2f%c",tem, m, yep, 37);
break;
case 2:
for (i= 0; i < tem; i++) {
if(stu[i].Clange >= 85) {
stu1[m]= stu[i];// 定义另一个结构体数组存储优秀学生信息
m++;
}
}
printf("\nC语言优秀学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}//展示优秀学生信息
yep =((float)m / (float)tem ) * 100;//计算优秀率
printf("\n一共%d位学生,C语言优秀%d位学生,优秀率%.2f%c",tem, m, yep, 37);
break;
case 3:
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}//展示所有学生信息
for (i= 0; i < tem; i++)
TOL+= stu[i].Clange;
printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
break;
}
break;
case 2://其余项与以上内容相似,由于篇幅问题不再展示,详情见完整代码
9.3 运行结果(以C语言成绩为例)
及格/不及格:
![](https://img-blog.csdnimg.cn/img_convert/703ff408446315258b9bf2cf7d19d023.png)
![](https://img-blog.csdnimg.cn/img_convert/e48caaef23650ffb428d8f1b70bf14cc.png)
优秀:
![](https://img-blog.csdnimg.cn/img_convert/bce97e967d84cc7d5588207c36e68cb3.png)
平均成绩:
![](https://img-blog.csdnimg.cn/img_convert/ea90a5a77578ee8e0e36484ce05075e3.png)
10. 完整源程序代码
10.1 代码组成结构
在本系统中,我们采用逐个功能逐个开发的思路,分别开发出(以下都为viod类型函数)menu(主菜单)、input(录入信息)、display(显示)、inquire(查询)、correct(修改)、Delete(删除)、sort(排序)、statistics(统计)函数,最终由intmain函数整合这8个功能函数,开发出较为完整的学生信息管理系统。
10.2 完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define len10//可按需调整学生信息结构体的大小
structstudent { //结构体形式储存学生信息
int num;
char name[10];
char xuehao[12];//学号统一为20开头的十位数
char sex[10];//男为M,女为W
int age;
char phone[16];
float Clange;
float Math;
float Eng;
float total;
float mean;
};
structstudent stu[len];
void menu(){ //目录
printf("\n\n");
printf("\t\t||*****************************************||\n");
printf("\t\t|| ----------------------- ||\n");
printf("\t\t||*********学 生 信 息 管 理 系 统*********||\n");
printf("\t\t|| ----------------------- ||\n");
printf("\t\t|| 1.输入学生信息 ||\n");
printf("\t\t|| 2.显示学生信息 ||\n");
printf("\t\t|| 3.查询学生信息 ||\n");
printf("\t\t|| 4.修改学生信息 ||\n");
printf("\t\t|| 5.删除学生信息 ||\n");
printf("\t\t|| 6.学生信息排序 ||\n");
printf("\t\t|| 7.统计学生信息 ||\n");
printf("\t\t||请选择操作: ||\n");
printf("\t\t|| ||\n");
printf("\t\t||*****************************************||\n");
}
voidinput() { //输入学生信息
int i, j = 0;
char ch[5];
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return ;
}
for (i = 0; i <= len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);//该部分代码用于导入数据,以后不再解释
for (i = 0; i <= len; i++) {
j = i;
if (stu[i].xuehao[0] != '2')
break;
}/*该部分代码用于寻找已有数据的数量,
如果len大于已有学生信息数,则从已有学生信息数的下一位开始输入,
若已有学生信息数已为结构体大小,输入无效*/
for (i = j ; i < len; i++) {
stu[i].num = i + 1;
printf("正在输入第%d位学生的信息:\n", i + 1 );
printf("\t请输入姓名:");
scanf("%s",&stu[i].name);
printf("\t请输入学号:");
scanf("%s",&stu[i].xuehao);
printf("\t请输入性别:");
scanf("%s",&stu[i].sex);
printf("\t请输入年龄:");
scanf("%d",&stu[i].age);
printf("\t请输入联系方式:");
scanf("%s",&stu[i].phone);
printf("\t请输入C语言成绩:");
scanf("%f",&stu[i].Clange);
printf("\t请输入数学成绩:");
scanf("%f",&stu[i].Math);
printf("\t请输入英语成绩:");
scanf("%f",&stu[i].Eng);
stu[i].total = stu[i].Clange +stu[i].Math + stu[i].Eng;
stu[i].mean = stu[i].total / 3;
printf("\t总成绩:%.2f\n\t平均成绩:%.2f\n", stu[i].total, stu[i].mean);
printf("该学生信息保存成功\n");
if (i != len - 1) {
printf("是否继续录入:(yes/no)");
scanf("%s",&ch);
if (ch[0] == 'n'&& ch[1] == 'o')
break;
}
}
if ((fp = fopen("学生信息.txt","wb")) == NULL) {
return ;
}
for (i = 0; i < len; i++) {
fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
stu[i].age, stu[i].phone,
stu[i].Clange,
stu[i].Math,
stu[i].Eng, stu[i].total, stu[i].mean);
}
fclose(fp);//以记事本形式保存输入的学生信息
return ;
}
voiddisplay() { //显示学生信息
int i;
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i = 0; i < len; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
}
voidinquire() { //以学号查询学生信息
int i, j, temp = 0;
char Xuehao[10];
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
printf("请输入学号:");
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] ==stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
break;
}
temp = 0;
}
if (i == len )
printf("未搜索到目标学生信息");
}
voidcorrect() { //修改学生信息
int i, j, temp = 0, t, age;
char Xuehao[10];
char Name[10], xueHao[12], Phone[16],sex[10];
float clange, math, eng, Total, Mean;
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
printf("请输入学号:");//学号查找目标学生信息
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] == stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
printf("请选择需要修改的信息:\n");
printf("1.姓名 2.学号 3.性别 4.年龄 5.联系方式 6.C语言成绩 7.数学成绩 8.英语成绩\n");
while (scanf("%d",&t)) {
if (t == 0)
break;
switch (t) {
case1:
printf("将该生姓名修改为:\n");
scanf("%s",&Name);
strcpy(stu[i].name,Name);
break;
case2:
printf("将该生学号修改为:\n");
scanf("%s",&xueHao);
strcpy(stu[i].xuehao,xueHao);
break;
case3:
printf("将该生性别修改为:\n");
scanf("%s",&sex);
strcpy(stu[i].phone,sex);
break;
case4:
printf("将该生年龄修改为:\n");
scanf("%d",&age);
stu[i].age= age;
break;
case5:
printf("将该生联系方式修改为:\n");
scanf("%s",&Phone);
strcpy(stu[i].phone,Phone);
break;
case6:
printf("将该生C语言成绩修改为:\n");
scanf("%f",&clange);
stu[i].Clange= clange;
break;
case7:
printf("将该生数学成绩修改为:\n");
scanf("%f",&math);
stu[i].Math= math;
break;
case8:
printf("将该生英语成绩修改为:\n");
scanf("%f",&eng);
stu[i].Eng= eng;
break;
default:
printf("选择错误,请重新选择(1-8):\n");
break;
}
printf("修改成功,是否需要继续修改(否请输入0,是请输入对应的数字1-8):\n");
}
Total = stu[i].Clange +stu[i].Math + stu[i].Eng;
Mean = Total / 3;
stu[i].total = Total;
stu[i].mean = Mean;
if ((fp = fopen("学生信息.txt","wb")) == NULL)
return;
for (j = 0; j < len;j++) {
fprintf(fp,"%d %s %s %s %d %s %.2f %.2f %.2f %.2f %.2f\n", stu[j].num,stu[j].name, stu[j].xuehao, stu[j].sex,
stu[j].age, stu[j].phone,
stu[j].Clange,
stu[j].Math,
stu[j].Eng, stu[j].total, stu[j].mean);
}
fclose(fp);
break;
}
temp = 0;
}
if (i == len )
printf("未搜索到目标学生信息\n");
}
voidDelete() { //删除学生信息
int i, j, k, temp = 0;
char Xuehao[10], ch[4];
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
printf("请输入学号:");//学号查找目标学生信息
scanf("%s", &Xuehao);
for (i = 0; i < len; i++) {
for (j = 0; j < 10; j++) {
if (Xuehao[j] == stu[i].xuehao[j])
temp++;
}
if (temp == 10) {
printf("搜索到目标学生信息:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
printf("确定删除该学生信息?(yes/no)\n");
scanf("%s",&ch);
if (ch[0] == 'n'&& ch[1] == 'o') {
break;
}
for (j = i; j < len;j++) {
for (k = 0; k< 10; k++)
stu[j].name[k]= stu[j + 1].name[k];
for (k = 0; k< 12; k++)
stu[j].xuehao[k]= stu[j + 1].xuehao[k];
for (k = 0; k< 16; k++)
stu[j].phone[k]= stu[j + 1].phone[k];
for (k = 0; k< 10; k++)
stu[j].sex[k]= stu[j + 1].sex[k];
stu[j].age =stu[j + 1].age;
stu[j].Clange= stu[j + 1].Clange;
stu[j].Math =stu[j + 1].Math;
stu[j].Eng =stu[j + 1].Eng;
stu[j].total =stu[j + 1].total;
stu[j].mean =stu[j + 1].mean;
}
if ((fp = fopen("学生信息.txt","wb")) == NULL)
return;
for (j = 0; j < len- 1; j++) {
fprintf(fp,"%d %s %s %s %d %s %.2f %.2f %.2f %.2f %.2f\n", stu[j].num,stu[j].name, stu[j].xuehao, stu[j].sex,
stu[j].age, stu[j].phone,
stu[j].Clange,
stu[j].Math,
stu[j].Eng, stu[j].total, stu[j].mean);
}
fclose(fp);
printf("删除成功\n");
break;
}
temp = 0;
}
if (i == len)
printf("未搜索到目标学生信息\n");
}
int upC(constvoid *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p1->Clange - p2->Clange);
}
intupmath(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p1->Math - p2->Math);
}
intupeng(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p1->Eng - p2->Eng);
}
intuptotal(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p1->total - p2->total);
}
intdownC(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p2->Clange - p1->Clange);
}
intdownmath(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p2->Math - p1->Math);
}
intdowneng(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p2->Eng - p1->Eng);
}
intdowntotal(const void *a, const void *b) {
struct student *p1 = (struct student*)a;
struct student *p2 = (struct student*)b;
return (p2->total - p1->total );
}
void sort(){ //学生信息排序(按各科成绩或总成绩、均分排序)
int i, j, tem;
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
for (i = 0; i < len; i++) {
if (stu[i].xuehao[0] != '2')
break;
tem = i + 1;
}
int o, p;
printf("请选择排序依据(输入对应的数字):1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩/平均成绩\n");
scanf("%d", &o);
printf("请选择排序方式(输入对应的数字):1.升序 2.降序\n");
scanf("%d", &p);
struct student a;
switch (o) {
case 1:
switch (p) {
case 1:
qsort(stu,tem, sizeof(stu[0]), upC);
for (i= 0; i < len - 1; i++) {
if(stu[i].Clange == stu[i + 1].Clange) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
case 2:
qsort(stu,tem, sizeof(stu[0]), downC);
for (i= 0; i < len - 1; i++) {
if(stu[i].Clange == stu[i + 1].Clange) {
for (j = 9; j > 0;j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
default:
printf("Wrong.\n");
break;
}
break;
case 2:
switch (p) {
case 1:
qsort(stu,tem, sizeof(stu[0]), upmath);
for (i= 0; i < len - 1; i++) {
if(stu[i].Math == stu[i + 1].Math) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
case 2:
qsort(stu,tem, sizeof(stu[0]), downmath);
for (i= 0; i < len - 1; i++) {
if(stu[i].Math == stu[i + 1].Math) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
default:
printf("Wrong.\n");
break;
}
break;
case 3:
switch (p) {
case 1:
qsort(stu,tem, sizeof(stu[0]), upeng);
for (i= 0; i < len - 1; i++) {
if(stu[i].Eng == stu[i + 1].Eng) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
case 2:
qsort(stu,tem, sizeof(stu[0]), downeng);
for (i= 0; i < len - 1; i++) {
if(stu[i].Eng == stu[i + 1].Eng) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
default:
printf("Wrong.\n");
break;
}
break;
case 4:
switch (p) {
case 1:
qsort(stu,tem, sizeof(stu[0]), uptotal);
for (i= 0; i < len - 1; i++) {
if(stu[i].total == stu[i + 1].total) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i+ 1] = a;
}
}
}
}
break;
case 2:
qsort(stu,tem, sizeof(stu[0]), downtotal);
for (i= 0; i < len - 1; i++) {
if(stu[i].total == stu[i + 1].total) {
for(j = 9; j > 0; j--) {
if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
a= stu[i];
stu[i]= stu[i + 1];
stu[i + 1] = a;
}
}
}
}
break;
default:
printf("Wrong.\n");
break;
}
break;
default:
printf("Wrong.\n");
break;
}
for (i = 0; i < len; i++) {
stu[i].num = i + 1;
}
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i = 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
printf("排序成功\n");
if ((fp = fopen("学生信息.txt","wb")) == NULL)
return;
for (i = 0; i < len; i++) {
fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
stu[i].age, stu[i].phone,
stu[i].Clange,
stu[i].Math,
stu[i].Eng, stu[i].total, stu[i].mean);
}
fclose(fp);
}
/*统计数据(各科及格率,优秀率,平均成绩),
令及格为成绩在60及以上,优秀为成绩在85及以上*/
voidstatistics() {
int i, j, tem;
FILE *fp;
if ((fp = fopen("学生信息.txt","rb")) == NULL) {
printf("Failed\n");
return;
}
for (i = 0; i < len; i++) {
fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
&stu[i].phone,
&stu[i].Clange,
&stu[i].Math,
&stu[i].Eng, &stu[i].total,&stu[i].mean);
}
fclose(fp);
for (i = 0; i < len; i++) {
if (stu[i].xuehao[0] != '2')
break;
tem = i + 1;
}
int o, p;
printf("请选择需要统计的数据:1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩(及格为180分及以上,优秀为255分及以上)\n");
scanf("%d", &o);
printf("请选择统计目标:1.及格学生 2.优秀学生 3.所有同学的平均成绩\n");
scanf("%d", &p);
int sum, m = 0, n = 0;
float yep, fal, TOL = 0; //符合/不合/所有学生总成绩
struct student stu1[len], stu2[len];
switch (o) {
case 1:
switch (p) {
case 1:
for (i= 0; i < tem; i++) {
if(stu[i].Clange >= 60) {
stu1[m]= stu[i];
m++;
}else {
stu2[n]= stu[i];
n++;
}
}
printf("\nC语言及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
printf("\nC语言不及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < n; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
stu2[i].sex, stu2[i].age,
stu2[i].phone,
stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
}
yep =((float)m / (float)tem ) * 100;
fal =n / tem ;
printf("\n一共%d位学生,C语言及格%d位学生,及格率%.2f%c",tem, m, yep, 37);
break;
case 2:
for (i= 0; i < tem; i++) {
if(stu[i].Clange >= 85) {
stu1[m]= stu[i];
m++;
}
}
printf("\nC语言优秀学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
yep =((float)m / (float)tem ) * 100;
printf("\n一共%d位学生,C语言优秀%d位学生,优秀率%.2f%c",tem, m, yep, 37);
break;
case 3:
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
for (i= 0; i < tem; i++)
TOL+= stu[i].Clange;
printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
break;
}
break;
case 2:
switch (p) {
case 1:
for (i= 0; i < tem; i++) {
if(stu[i].Math >= 60) {
stu1[m]= stu[i];
m++;
}else {
stu2[n]= stu[i];
n++;
}
}
printf("\n数学及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
printf("\n数学不及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < n; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
stu2[i].sex, stu2[i].age,
stu2[i].phone,
stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
}
yep =((float)m / (float)tem ) * 100;
fal =n / tem ;
printf("\n一共%d位学生,数学及格%d位学生,及格率%.2f%c", tem, m, yep, 37);
break;
case 2:
for (i= 0; i < tem; i++) {
if(stu[i].Math >= 85) {
stu1[m] = stu[i];
m++;
}
}
printf("\n数学优秀学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
yep =((float)m / (float)tem ) * 100;
printf("\n一共%d位学生,数学优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
break;
case 3:
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
for (i= 0; i < tem; i++)
TOL+= stu[i].Math;
printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
break;
}
break;
case 3:
switch (p) {
case 1:
for (i= 0; i < tem; i++) {
if(stu[i].Eng >= 60) {
stu1[m] = stu[i];
m++;
}else {
stu2[n]= stu[i];
n++;
}
}
printf("\n英语及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
printf("\n英语不及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < n; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
stu2[i].sex, stu2[i].age,
stu2[i].phone,
stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
}
yep =((float)m / (float)tem ) * 100;
printf("\n一共%d位学生,英语及格%d位学生,及格率%.2f%c", tem, m, yep, 37);
break;
case 2:
for (i= 0; i < tem; i++) {
if(stu[i].Eng >= 85) {
stu1[m]= stu[i];
m++;
}
}
printf("\n英语优秀学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
yep =((float)m / (float)tem ) * 100;
printf("\n一共%d位学生,英语优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
break;
case 3:
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
for (i= 0; i < tem; i++)
TOL+= stu[i].Eng;
printf("\n所有学生英语的平均成绩为%.2f", TOL / tem);
break;
}
break;
case 4:
switch (p) {
case 1:
for (i= 0; i < tem; i++) {
if(stu[i].total >= 180) {
stu1[m]= stu[i];
m++;
}else {
stu2[n]= stu[i];
n++;
}
}
printf("\n总成绩及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
printf("\n总成绩不及格学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < n; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
stu2[i].sex, stu2[i].age,
stu2[i].phone,
stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
}
yep =((float)m / (float)tem ) * 100;
fal =n / tem ;
printf("\n一共%d位学生,总成绩及格%d位学生,及格率%.2f%c", tem, m, yep, 37);
break;
case 2:
for (i= 0; i < tem; i++) {
if(stu[i].total >= 255) {
stu1[m]= stu[i];
m++;
}
}
printf("\n总成绩优秀学生:\n");
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < m; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
stu1[i].sex, stu1[i].age,
stu1[i].phone,
stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
}
yep =((float)m / (float)tem ) * 100;
printf("\n一共%d位学生,总成绩优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
break;
case 3:
printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
for (i= 0; i < tem; i++) {
printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
stu[i].sex, stu[i].age,
stu[i].phone,
stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
}
for (i= 0; i < tem; i++)
TOL+= stu[i].total;
printf("\n所有学生总成绩的平均成绩为%.2f", TOL / tem);
break;
}
break;
}
}
int main(){
menu();
int n, a;
scanf("%d", &n);
switch (n) {
case 1:
input();
break;
case 2:
display();
break;
case 3:
inquire();
break;
case 4:
correct();
break;
case 5:
Delete();
break;
case 6:
sort();
break;
case 7:
statistics();
break;
default:
printf("Wrong\n");
break;
}
printf("是否回到主菜单?(1.是 0.否)");
while (scanf("%d", &a)) {
if (a == 1) {
menu();
scanf("%d",&n);
switch (n) {
case1:
input();
break;
case 2:
display();
break;
case 3:
inquire();
break;
case 4:
correct();
break;
case 5:
Delete();
break;
case 6:
sort();
break;
case 7:
statistics();
break;
default:
printf("Wrong\n");
break;
}
} else if (a == 0)
break;
printf("是否回到主菜单?(1.是 0.否)");
}
return 0;
}