1系统分析

1.1功能需求

软件工程(移动互联网方向)专业学生的班主任管家系统分别涵盖2015~2016、2016~2017、2017~2018、2018~2019四个学年,八个学期。

1.1.1功能划分

每个学期可进行的操作功能有录入、修改、查询三项。

1.1.2功能描述

<1>录入功能:

课程信息可录入的仅选修课。

学生信息内容包括学生的学号、姓名、宿舍号、性别、年龄。

课程信息包括学号、课程编号、课程名称、必/选修课程、课程所在学期、课程学分。

成绩信息包括学号、学期、课程成绩、业务课成绩、是否挂科(计算得出)、挂科数目(计算得出)、总测评信息(由品行表现信息和业务课信息计算得出)。

奖惩信息(奖学金自动评定、自动添加)内容包括获奖类别、获奖时间、奖励学分、惩处类别、惩处时间、惩处学分。

品行表现成绩内容包括辅导员评议、班主任评议、班级评议、品行表现总成绩(计算得出)。

<2>修改功能:

修改的对象就是录入的内容。

<3>查询功能:

1)   对整个班级的查询可分别按业务课总成绩、不及格门次、奖励、惩罚、对全体学生由高到低排序,按业务课平均成绩对全体宿舍由高到低排序。

2)   对课程的查询可按不及格学生数对课程由高到低排序,显示对指定课程各分数段的统计。

3)   对学生的查询可实现显示指定学生过往学期业务课总成绩班级排名、挂科次数,显示指定学生本学期业务课总成绩班级排名、指定课程班级排名。

课程信息以《青岛科技大学人才培养方案》为准,奖惩细则以《青岛科技大学学生手册》为准。

1.2性能需求

1.系统有功能导航,操作灵活。

2.录入无非法数据,保证进入系统内的数据均为合法数据。

3.输入输出数据格式规范。输入数据有提示,输出的数据含义醒目。

4.运算结果准确。

1.3数据要求

1.3.1数据流图

班主任管家系统顶层图
0层图
一层图

1.3.2数据词典

<1>数据流词条描述

数据流名:操作信息

来源:使用人员

去向:系统

组成:操作指令、班级、学期、学生及关联的全部信息

流通量:每进行一次操作流通一次

数据流名:OK

来源:录入功能、修改功能

去向:查询功能

组成: 标志符

流通量:每进行一次录入、修改操作流通一次

数据流名:结果

来源:系统

去向:使用人员

组成:操作成功/失败的提示、显示查询内容

流通量:每进行一次操作流通一次

<2>数据文件词条描述

数据文件名:学生综合信息记录

简述:以学号为枢纽的一系列学生信息

数据文件组成:课程信息、奖惩信息、品行表现信息、学生基本信息

1.3.3实体关系图

学生与课程的关系描述

学生与处分之间的关系描述

学生与宿舍之间的关系描述

2系统设计

2.1系统流程图设计

2.2系统功能模块图设计

2.3数据结构设计

数据结构采用的的逻辑结构为线性表,采用的物理结构为顺序存储结构即数组。

学生信息内容包括学生的学号、姓名、宿舍号、性别、年龄。

课程信息包括学号、课程编号、课程名称、必/选修课程、课程所在学期、课程学分。

成绩信息包括学号、学期、课程成绩、业务课成绩、是否挂科、挂科数目、总测评信息(由品行表现信息和业务课信息计算得)。

奖惩信息(奖学金自动评定、自动添加)内容包括获奖类别、获奖时间、奖励学分、惩处类别、惩处时间、惩处学分、总奖惩学分

品行表现成绩内容包括辅导员评议、班主任评议、班级评议、品行表现总成绩。

2.4菜单结构设计

一级菜单:1.录入信息 2.修改信息 3.查询信息 0.退出程序

二级菜单:1.学生信息 2.课程信息3.品行表现信息 4.奖惩信息 5.成绩信息 6.返回主菜单 0.退出程序

三级菜单:1.第一学期 2.第二学期3.第三学期 4.第四学期 5.第五学期 6.第六学期7.第七学期 8.第八学期 9.返回主菜单 0.退出程序

四级菜单:1.按业务课成绩加权平均分对学生由高到低排序 2..按业务课成绩加权平均分对宿舍由高到低排序 3.按不及格门次对学生由高到低排序 4.按不及格学生数对课程由高到低排序 5.按奖励对学生由高到低排序 6.按惩罚对学生由高到低排序 7.某门课各分数段成绩统计 8.某同学各课程班级排名,业务课总成绩班级排名9.某同学过往学期业务课班级排名,挂科次数 10.返回主菜单 0.退出程序

2.5输入输出格式设计

学生信息

学生信息

学号

姓名

宿舍号

性别

年龄

格式

%d

%s

%s

%s

%d

类型

Int

Char[9]

Char[8]

Char[3]

int

示例

1508100234

某某某某

北7#707

19

课程信息

课程信息

学号

课程学分

课程编号

课程名称

必/选修课

课程所在学期

格式

%d

%d

%s

%s

%s

%d

类型

Int

int

Char[10]

Char[15]

Char[3]

int

示例

1508100234

1

B06020100

离散数学

1

奖惩信息

奖惩信息

学号

获奖类别

获奖时间

奖励学分

惩处类别

惩处时间

惩处学分

格式

%d

%s

%s

%d

%s

%s

%d

类型

int

Char[15]

Char[11]

int

Char[15]

Char[11]

Int

示例

1508100234

省二等

2015.12.12

5

校级警告

2015.21.12

-2

品行表现信息

品行表现信息

学号

辅导员评议

班主任评议

班级评议

品行表现成绩总成绩

总成绩

格式

%d

%f

%f

%f

%f

%f

类型

int

float

float

float

float

float

示例

1508100234

66.6

66.6

66.6

66.6

66.6

成绩信息

成绩信息

学号

学期

课程成绩

是否挂科

挂科数目

业务课总成绩

总测评成绩

格式

%d

%d

%f

%s

%d

%f

%f

类型

Int

Int

Float[14]

Char[14]

Int

Float

float

示例

150810033

1

66

0

66

77

2.6文件结构设计

总共五个文件用来储存基础信息:学生信息文件、课程信息文件、奖惩信息文件、品行表现信息文件、成绩信息。

录入(修改)功能:创建(打开)文件—>录入(修改)基础数据—>关闭文件

查询功能:打开文件—>对数据进行相应统计排序—>输出结果—>关闭文件

2.7代码规范化设计

<1>代码编写规范
1)  删除所有无用代码
2)  必须给代码添加注释,一个类的注释字数不得小于代码的百分之20%
3)   建议遵循30秒原则。如果另一个程序员无法在三十秒内无法知道你的函数在做什么,如何做以及为什么要这样做,那么说明你的代码是难于维护的,需要得到提高。
4)   一个函数的代码长度不允许超过100行,超过一百行的函数建议在不破坏原子性的基础上进行拆分。
5)   变量都应在方法或者类的头部集中定义
6)   保证一行代码只做一件事
7)   使用括号来控制操作符的运算顺序,以免使用C默认的操作符优先级顺序。
8)   代码格式化:对代码进行格式化,再进行提交。
9)   接口不允许没有方法或者变量的声明

<2>     命名规范
1)   各种标识符的命名要使用有实际意义的英文单词或者英文单词缩写,缩写词及英文单词要收录在项目的简写词汇表中。切忌使用阿拉伯数字和拼音进行命名。
2)   方法名:首字母小写,其余单词首字母都需大写。
3)   全局变量,和常量名称要求全部字母大写。
4)   参数名称与局部变量基本相同,区别在于参数名称需要加上冠词a ,an 或者在单词结尾以s结束。
 
<3>     注释规范
1)   注释需要注意的事项:
★注释应该用中文清晰表达意思,应该是程序看起来更清晰,更容易理解
★注释要尽量简明,避免装饰性的注释。
★注释不但要说明做什么,还应当说明为什么要这样做。最好先写注释表明要做什么,再进行编码。

2)  接口注释:
★接口的注释风格基本与类的注释风格相同;
★在别人使用接口之前,必须了解接口所包含的概念。检验一个接口是否应该定义的简单方法是:你是否能★够容易的描述接口的用途;
★接口如何应当和不应当被使用。开发者需要知道该接口如何被使用,也希望知道该接口不能被怎样使用。
 
3)   函数的注释
★函数头注释必须包括:函数执行了什么功能,为什么要这样处理;函数处理过程中对对象的哪些属性
★可能进行更改;函数执行前后,对象的状态;
★比较、循环等控制结构加注释(可选);
★在代码的功能并非一目了然的情况下,应当说明为什么要这样做;
★局部变量必须加注释;
★复杂难写的代码必须加注释;

3.测试

3.1测试目的

发现问题,改正问题。

3.2测试数据

由于包含太多个人信息,此处略去。

3.3测试结果

经过几次调试、改进,排序结果、统计结果与手工计算结果一致。

4.总结

本次实训的班主任管家系统相对于以往的程序,进步之处在于杜绝了全局变量的使用。基于由文件得出大小、申请动态空间、读出信息、处理信息、释放空间的思想,降低了各函数间的耦合性,提高了函数的独立性。

同时水平有限,仍有几处遗憾。

首先是一些地方按统一的格式循环输出,难以照顾到极端情况,会出现格式不匹配的问题。

然后深感本程序无论是在逻辑上还是代码量上都存在很大的精简空间。

其次,未重视重复操作的可能性,重复录入时应有文件已存在的提示,同时存在每查看一次排名就会在奖惩信息库里追加一次获奖信息的问题,以后的开发中应遵循高内聚低耦合的原则,提高函数功能的独立性。

再有,为提高输入效率,数据成批输入,导致非法提醒的程序功能形同虚设。

最后,由于经验不足,导致早期设计的模型并不符合实际,后期又不断修改,为防止出入过大,本文档也在代码完工后根据代码重新修改了一遍。总体上基本功能均能实现,但尚有缺陷,经不起严格的测试。

参考文献

[1]李向阳,方娇莉.C语言程序设计(基于CDIO思想).北京:清华大学出版社,2012.

[2]青岛科技大学教务处.人才培养方案.2015.

[3]青岛科技大学学生工作处.学生手册.2015.

致谢

感谢指导教师的指导,感谢参与交流的同学。

附录

1.程序部分截图

主菜单

录入或修改信息菜单

学期菜单

查询信息菜单

源码

/**
*FileName:   软件152-1508100201-丁兆元.cpp
*Author:     丁兆元
*Version :   1.0
*Date:       2016.12
*Description: 班主任管家系统(codeblocks编译环境)请按菜单上的相应顺序进行操作,
*录入学生基本信息只有一次机会,选修课的录入每学期只有一次机会,重复进行可能会造成文件信息丢失。
*File List:  student.txt,course.txt,score.txt,rAndP.txt,conduct.txt
*Function List:
*1. 各菜单函数:menu1,menu2,menu3,menu4,menu401,menu402,menu403,menu404,
*                menu405,menu406,menu407,menu408,menu409,menu4010,menu4011
*2. 与各菜单相对应的选择函数:choose1,choose2,choose3,choose4011.
*3. 各功能函数:sort1,sort2,sort3,sort4,sort5,sort6,sort7,sort8,statistic9
*4. 主函数:main
*/
/********常量定义(#define)和系统函数原型定义(#include)声明***********/
#include"cstdio"
#include"windows.h"using namespace std;/************************数据结构的定义******************************/
/*变量命名采用驼峰命名法*/
typedef struct                      /*品行表现信息*/
{int stuNo;int term;float counsellor;float classTeacher;float classmates;float conSum;                  /*!计算得出!*/
} conduct;typedef struct                      /*奖惩信息*/
{int stuNo;int term;char rewards[17];char rTime[11];float rCredit;char punishment[17];char pTime[11];float pCredit;} rAndP;typedef struct                      /*课程信息*/
{int stuNo;int term;char couNo[14][10];char couName[14][20];char couSort[14][3];float couCredit[14];
} course;typedef struct                      /*成绩信息*/
{int stuNo;int term;float couScore[14];char again[14][3];                  /*!计算得出!*/int againNum;                      /*!计算得出!*/      /*挂科次数*/float couSumScore;                 /*!计算得出!*/    /*业务课总成绩*/float sumScore;                   /*!计算得出!*/    /* 由业务课总成绩与品行表现总成绩共同计算出总测评成绩*/
} score;typedef struct                     /*个人信息*/
{int stuNo;char stuName[9];char dormitory[7];char sex[3];int age;
} student;/*****************各种函数**********************//**
*Function:      sort1
*Description:   某同学某课程班级排名
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort1(int choice3)
{int len;int a=0;int  stuNo;char couNo[10];FILE* fp;FILE* fp1;typedef struct{int stuNo;float score;} s;s temp;int term[8]= {6,8,9,10,9,7,2,1};if((fp=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}if((fp1=fopen("course.txt","rb"))==0){printf("Can't open the file of course!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(score);s s1[len/8];rewind(fp);score *scores=NULL;scores=(score*)malloc(sizeof(score)*len);fread(scores,sizeof(score),len,fp);course *courses=NULL;courses=(course*)malloc(sizeof(course)*len);fread(courses,sizeof(course),len,fp1);printf("请输入学生学号:");scanf("%d",&stuNo);printf("\t必修课课程信息\n");printf("=========================================================\n");printf("课程编号\t课程名称\t课程学分\t必/选修课\n");for(int i=0; i<8; i++)if(courses[i].term==choice3){for(int j=0; j<term[choice3-1] ; j++)printf("%s\t%s\t%.2f\t\t%s\t\n",courses[i].couNo[j],courses[i].couName[j],courses[i].couCredit[j],courses[i].couSort[j]);}printf("=========================================================\n");printf("请输入课程编号:");scanf("%s",couNo);for(int i=choice3-1; i<len; i+=8)if(courses[i].term==choice3){for(int j=0; j<term[choice3-1] ; j++){if(strcmp(courses[i].couNo[j],couNo)==0){s1[a].score=scores[i].couScore[j];s1[a].stuNo=scores[i].stuNo;a++;}}}for(int i=0; i<len/8-1; i++)for(int j=0; j<len/8-1-i; j++)if(s1[j].score<s1[j+1].score){temp=s1[j];s1[j]=s1[j+1];s1[j+1]=temp;}for(int i=0; i<len/8; i++)if(stuNo==s1[i].stuNo){printf("该生该课程班级排名为:%d\n",i+1);}fclose(fp1);fclose(fp);free(courses);free(scores);system("pause");
}
/**
*Function:      sort2
*Description:   某同学过往学期业务课班级排名,挂科次数
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort2(int choice3)
{score temp;int len;int no;int a=0;printf("请输入要查询的学生的学号:");scanf("%d",&no);FILE* fp;if((fp=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(score);score* scores;scores=(score*)malloc(sizeof(score)*len);rewind(fp);fread(scores,sizeof(score),len,fp);for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(scores[j].couSumScore<scores[j+1].couSumScore){temp=scores[j];scores[j]=scores[j+1];scores[j+1]=temp;}printf("\t您要查询的信息\n");printf("学期\t成绩排名\t挂科次数\n");printf("================================\n");for(int i=1; i<=choice3; i++){a=0;for(int j=0; j<len; j++){if(scores[j].term==i){a++;if(scores[j].stuNo==no){printf("%d\t%d\t\t%d\n",i,a,scores[j].againNum);}}}}printf("================================\n");free(scores);fclose(fp);system("pause");}/**
*Function:      sort3
*Description:   按业务课平均分成绩对宿舍由高到低排序
*Calls:         无
*Called By:     choose4011
*Files Accessed:student.txt,score.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort3(int choice3)
{typedef struct{char dormitory[7];float couSumScore;} dorScore;dorScore temp;FILE* fp1;FILE* fp2;int len;int a=0;int b=1;if((fp1=fopen("student.txt","rb"))==0){printf("Can't open the file of student!");exit(0);}if((fp2=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(student);rewind(fp1);rewind(fp2);dorScore d[len];student* students=NULL;students=(student*)malloc(sizeof(student)*len);score* scores=NULL;scores=(score*)malloc(sizeof(score)*len*8);fread(students,sizeof(student),len,fp1);fread(scores,sizeof(score),len*8,fp2);for(int i=0; i<len; i++){for(int j=0; j<len; j++)if(i!=j&&strcmp(students[i].dormitory,students[j].dormitory)==0&&strcmp(students[i].dormitory,"0")!=0){strcpy(students[j].dormitory,"0");scores[i*8+choice3-1].couSumScore+=scores[j*8+choice3-1].couSumScore;b++;}strcpy(d[i].dormitory,students[i].dormitory);d[i].couSumScore=scores[i*8+choice3-1].couSumScore/b;b=1;}for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(d[j].couSumScore<d[j+1].couSumScore){temp=d[j];d[j]=d[j+1];d[j+1]=temp;}printf("\t宿舍业务课平均分排名\n");printf("=================================\n");printf("名次\t宿舍\t业务课平均分\n");for(int i=0; i<len; i++)if(strcmp(d[i].dormitory,"0")!=0){printf("%d\t%s\t%.2f\n",a+1,d[i].dormitory,d[i].couSumScore);a++;}printf("=================================\n");fclose(fp1);fclose(fp2);free(students);free(scores);system("pause");
}/**
*Function:      sort4
*Description:   按业务课平均分成绩对学生由高到低排序,并在奖惩库里追加奖学金信息
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt,rAndP.txt
*Files Updated: rAndP.txt
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort4(int choice3)
{int len;int a=0;int n[3];FILE *fp;FILE *fp1;if((fp1=fopen("rAndP.txt","ab+"))==0){printf("Can't open the file of rAndP!");exit(0);}if((fp=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(score);rewind(fp);score* scores=NULL;score temp;scores=(score*)malloc(sizeof(score)*len);rAndP* rAndPs=NULL;rAndPs=(rAndP*)malloc(sizeof(score)*1);fread(scores,sizeof(score),len,fp);for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(scores[j].couSumScore<scores[j+1].couSumScore){temp=scores[j];scores[j]=scores[j+1];scores[j+1]=temp;}n[0]=len/8*0.03+1;n[1]=len/8*0.07+1;n[2]=len/8*0.15+1;printf("\t业务课平均分学生排名\n");printf("====================================\n");printf("名次\t学号\t\t业务课平均分\n");for(int i=0; i<len; i++)if(scores[i].term==choice3){a++;printf("%d\t%d\t%.2f\n",a,scores[i].stuNo,scores[i].couSumScore);if(a<=n[0]){rAndPs[0].term=choice3;strcpy(rAndPs[0].rewards,"一等奖");strcpy(rAndPs[0].rTime,"期末");rAndPs[0].rCredit=4;rAndPs[0].stuNo=scores[i].stuNo;fwrite(rAndPs,sizeof(rAndP),1,fp1);}else if(a<=n[1]){rAndPs[0].term=choice3;strcpy(rAndPs[0].rewards,"二等奖");strcpy(rAndPs[0].rTime,"期末");rAndPs[0].rCredit=3;rAndPs[0].stuNo=scores[i].stuNo;fwrite(rAndPs,sizeof(rAndP),1,fp1);}else if(a<=n[2]){rAndPs[0].term=choice3;strcpy(rAndPs[0].rewards,"三等奖");strcpy(rAndPs[0].rTime,"期末");rAndPs[0].rCredit=2;rAndPs[0].stuNo=scores[i].stuNo;fwrite(rAndPs,sizeof(rAndP),1,fp1);}}printf("====================================\n");fclose(fp1);fclose(fp);free(scores);free(rAndPs);system("pause");}/**
*Function:      sort5
*Description:   按不及格学生数对课程由高到低排序
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt,course.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort5(int choice3)
{int len;FILE* fp1;FILE* fp2;int term[8]= {6,8,9,10,9,7,2,1};typedef struct{char couName[20];int a;} s;s s1[term[choice3-1]];s temp;if((fp1=fopen("course.txt","rb"))==0){printf("Can't open the file of course!");exit(0);}if((fp2=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(course);rewind(fp1);course *courses=NULL;courses=(course*)malloc(sizeof(course)*len);fread(courses,sizeof(course),len,fp1);score *scores=NULL;scores=(score*)malloc(sizeof(score)*len);fread(scores,sizeof(score),len,fp2);for(int j=0; j<term[choice3-1] ; j++){strcpy(s1[j].couName,courses[choice3-1].couName[j]);s1[j].a=0;}for(int i=0; i<len; i++)if(courses[i].term==choice3){for(int j=0; j<term[choice3-1] ; j++){if(strcmp(scores[i].again[j],"是")==0)s1[j].a++;}}for(int i=0; i<term[choice3-1]-1; i++)for(int j=0; j<term[choice3-1]-1; j++){if(s1[j].a<s1[j+1].a){temp=s1[j];s1[j]=s1[j+1];s1[j+1]=temp;}}printf("\t课程不及格人数排名\n");printf("=================================\n");printf("名次\t课程名\t\t挂科人数\n");for(int i=0; i<term[choice3-1]; i++){printf("%d\t%s\t%d\n",i+1,s1[i].couName,s1[i].a);}printf("=================================\n");fclose(fp1);fclose(fp2);free(courses);free(scores);system("pause");
}/**
*Function:      sort6
*Description:   按不及格门次对学生由高到低排序
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt,rAndP.txt
*Files Updated: rAndP.txt
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort6(int choice3)
{int len;int a=0;FILE *fp;if((fp=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(score);rewind(fp);score* scores=NULL;score temp;scores=(score*)malloc(sizeof(score)*len);fread(scores,sizeof(score),len,fp);for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(scores[j].againNum<scores[j+1].againNum){temp=scores[j];scores[j]=scores[j+1];scores[j+1]=temp;}printf("\t不及格门次学生排名\n");printf("==================================\n");printf("名次\t学号\t\t不及格门次\n");for(int i=0; i<len; i++)if(scores[i].term==choice3){a++;printf("%d\t%d\t%d  \n",a,scores[i].stuNo,scores[i].againNum);}printf("==================================\n");fclose(fp);free(scores);system("pause");}
/**
*Function:      sort7
*Description:   按惩罚对学生由高到低排序
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt,rAndP.txt
*Files Updated: rAndP.txt
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort7(int choice3)
{int len;FILE *fp;rAndP temp;int a=0;if((fp=fopen("rAndP.txt","rb+"))==0){printf("Can't open the file of rAndP!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(rAndP);rewind(fp);rAndP* rAndPs=NULL;rAndPs=(rAndP*)malloc(sizeof(rAndP)*len);fread(rAndPs,sizeof(rAndP),len,fp);for(int i=0; i<len-1; i++)for(int j=1; j<len-1-i; j++){if(rAndPs[i].stuNo=rAndPs[j].stuNo&&rAndPs[i].stuNo!=0){rAndPs[i].pCredit+=rAndPs[j].pCredit;rAndPs[j].stuNo=0;}}for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(rAndPs[j].pCredit>rAndPs[j+1].pCredit){temp=rAndPs[j];rAndPs[j]=rAndPs[j+1];rAndPs[j+1]=temp;}printf("以下为奖惩库里记录的学生总奖励学分排名,未收录的学生奖惩学分默认为零。\n");printf("\t总惩罚学分排名\n");printf("================================\n");printf("名次\t学号\t\t惩罚学分\n");for(int i=0; i<len; i++)if(rAndPs[i].stuNo!=0){a++;printf("%d\t%d\t%.2f\n",a,rAndPs[i].stuNo,rAndPs[i].pCredit);}printf("================================\n");fclose(fp);free(rAndPs);system("pause");
}
/**
*Function:      sort8
*Description:   按奖励对学生由高到低排序
*Calls:         无
*Called By:     choose4011
*Files Accessed:rAndP.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void sort8(int choice3)
{int len;FILE *fp;rAndP temp;int a=0;if((fp=fopen("rAndP.txt","rb+"))==0){printf("Can't open the file of rAndP!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(rAndP);rewind(fp);rAndP* rAndPs=NULL;rAndPs=(rAndP*)malloc(sizeof(rAndP)*len);fread(rAndPs,sizeof(rAndP),len,fp);for(int i=0; i<len-1; i++)for(int j=0; j<len-1; j++){if(rAndPs[i].stuNo==rAndPs[j].stuNo&&rAndPs[i].stuNo!=0&&i!=j){rAndPs[i].rCredit+=rAndPs[j].rCredit;rAndPs[j].stuNo=0;}}for(int i=0; i<len-1; i++)for(int j=0; j<len-1-i; j++)if(rAndPs[j].rCredit<rAndPs[j+1].rCredit){temp=rAndPs[j];rAndPs[j]=rAndPs[j+1];rAndPs[j+1]=temp;}printf("以下为奖惩库里记录的学生总奖励学分排名,未收录的学生奖惩学分默认为零。\n");printf("\t总奖励学分排名\n");printf("================================\n");printf("名次\t学号\t\t奖励学分\n");for(int i=0; i<len; i++)if(rAndPs[i].stuNo!=0){a++;printf("%d\t%d\t%.2f\n",a,rAndPs[i].stuNo,rAndPs[i].rCredit);}printf("================================\n");fclose(fp);free(rAndPs);system("pause");
}
/**
*Function:      statistic9
*Description:   某门课各分数段人数统计
*Calls:         无
*Called By:     choose4011
*Files Accessed:score.txt
*Files Updated: 无
*Input:         choice3,
*Output:        排序结果
*Return:        无
*/
void statistic9(int choice3)
{int n;int len;char couNo[10];FILE* fp1;FILE* fp2;int term[8]= {6,8,9,10,9,7,2,1};int a[10]= {0};if((fp1=fopen("course.txt","rb"))==0){printf("Can't open the file of course!");exit(0);}if((fp2=fopen("score.txt","rb"))==0){printf("Can't open the file of score!");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(course);rewind(fp1);course *courses=NULL;courses=(course*)malloc(sizeof(course)*len);fread(courses,sizeof(course),len,fp1);score *scores=NULL;scores=(score*)malloc(sizeof(score)*len);fread(scores,sizeof(score),len,fp2);printf("\t必修课课程信息\n");printf("=========================================================\n");printf("课程编号\t课程名称\t课程学分\t必/选修课\n");for(int i=0; i<8; i++)if(courses[i].term==choice3){for(int j=0; j<term[choice3-1] ; j++)printf("%s\t%s\t%.2f\t\t%s\t\n",courses[i].couNo[j],courses[i].couName[j],courses[i].couCredit[j],courses[i].couSort[j]);}printf("=========================================================\n");printf("请输入要统计的课程编号:");scanf("%s",couNo);for(int i=0; i<len; i++)if(courses[i].term==choice3){for(int j=0; j<term[choice3-1] ; j++){if(strcmp(courses[i].couNo[j],couNo)==0){if(scores[i].couScore[j]>=90&&scores[i].couScore[j]<=100)a[9]++;if(scores[i].couScore[j]>=80&&scores[i].couScore[j]<90)a[8]++;if(scores[i].couScore[j]>=70&&scores[i].couScore[j]<80)a[7]++;if(scores[i].couScore[j]>=60&&scores[i].couScore[j]<70)a[6]++;if(scores[i].couScore[j]>=50&&scores[i].couScore[j]<60)a[5]++;if(scores[i].couScore[j]>=40&&scores[i].couScore[j]<50)a[4]++;if(scores[i].couScore[j]>=30&&scores[i].couScore[j]<40)a[3]++;if(scores[i].couScore[j]>=20&&scores[i].couScore[j]<30)a[2]++;if(scores[i].couScore[j]>=10&&scores[i].couScore[j]<20)a[1]++;if(scores[i].couScore[j]>=0&&scores[i].couScore[j]<10)a[0]++;}}}printf(" 分数段人数统计\n");printf("=============\n");printf("分数段\t人数\n");for(int i=9; i>=0; i--){printf("%d-%d\t%d\n",i*10,(i+1)*10,a[i]);}printf("=============\n");fclose(fp1);fclose(fp2);free(courses);free(scores);system("pause");
}/**
*Function:      choose4011
*Description:   对四级菜单下的选择进行处理
*Calls:         各功能函数
*Called By:     menu4011
*Files Accessed:student.txt,course.txt,conduct.txt,rAndP.txt,score.txt
*Files Updated: rAndP.txt
*Input:         choice4011
*Output:        无
*Return:        无
*/
void choose4011(int choice3,int choice4011)
{switch(choice4011){/*对应menu409选项*/case 1:sort1(choice3);break;case 2:sort2(choice3);break;case 3:sort3(choice3);break;case 4:sort4(choice3);break;case 5:sort5(choice3);break;case 6:sort6(choice3);break;case 7:sort7(choice3);break;case 8:sort8(choice3);break ;case 9:statistic9(choice3);break;case 10:break;case 0:exit(0);default:printf("输入有误!\n");system("pause");system("cls");break;}
}
/**
*Function:      menu401
*Description:   录入个人信息(只允许进行一次操作),并在此基础上对每位同学完成8个学期必修课的初始化
*Calls:         无
*Called By:     choose4
*Files Accessed:student.txt,course.txt
*Files Updated: student.txt,course.txt
*Input:         无
*Output:        个人信息格式提醒,操作提示
*Return:        0
*/
int menu401()
{int n;FILE* fp1;if((fp1=fopen("student.txt","wb+"))==NULL){printf("Can't open the file of student!");exit(0);}printf("请输入要录入个人信息的人数:\n");scanf("%d",&n);student *students=NULL;students=(student*)malloc(sizeof(student)*n);printf("请按约定的格式输入个人信息:\n");printf("学号(int) 姓名(char[9]) 宿舍号(char[7]) 性别(char[3]) 年龄(int)\n");for(int i=0; i<n; i++){scanf("%d %s %s %s %d",&students[i].stuNo,&students[i].stuName,&students[i].dormitory,&students[i].sex,&students[i].age);}fwrite(students,sizeof(student),n,fp1);rewind(fp1);fread(students,sizeof(student),n,fp1);printf("您成功输入了以下信息:\n");printf("=======================================================\n");printf("学号\t\t姓名\t宿舍号\t性别\t 年龄\t\n");for(int i=0; i<n; i++)printf("%d\t%s\t%s\t%s\t%d\n",students[i].stuNo,students[i].stuName,students[i].dormitory,students[i].sex,students[i].age);printf("=======================================================\n");course *courses=NULL;courses=(course*)malloc(sizeof(course)*n*8);for(int i=0; i<n; i++){/*第一学期必修课的初始化*/courses[i*8+0].stuNo=students[i].stuNo;strcpy(courses[i*8+0].couName[0],"近代史纲要");strcpy(courses[i*8+0].couName[1],"大学英语A1");strcpy(courses[i*8+0].couName[2],"大学体育1");strcpy(courses[i*8+0].couName[3],"高等数学A1");strcpy(courses[i*8+0].couName[4],"软件导论");strcpy(courses[i*8+0].couName[5],"c语言设计");strcpy(courses[i*8+0].couNo[0],"B27020100");strcpy(courses[i*8+0].couNo[1],"B10060111");strcpy(courses[i*8+0].couNo[2],"B14010101");strcpy(courses[i*8+0].couNo[3],"B06010111");strcpy(courses[i*8+0].couNo[4],"B08050101");strcpy(courses[i*8+0].couNo[5],"B08010100");for(int j=0; j<6; j++)strcpy(courses[i*8+0].couSort[j],"必");courses[i*8+0].couCredit[0]=2;courses[i*8+0].couCredit[1]=4;courses[i*8+0].couCredit[2]=1;courses[i*8+0].couCredit[3]=5;courses[i*8+0].couCredit[4]=2;courses[i*8+0].couCredit[5]=3.5;courses[i*8+0].term=1;/*第二学期必修课的初始化*/courses[i*8+1].stuNo=students[i].stuNo;strcpy(courses[i*8+1].couName[0],"思修与法律");strcpy(courses[i*8+1].couName[1],"大学英语A2");strcpy(courses[i*8+1].couName[2],"大学体育2");strcpy(courses[i*8+1].couName[3],"高等数学A2");strcpy(courses[i*8+1].couName[4],"大学物理C1");strcpy(courses[i*8+1].couName[5],"离散数学");strcpy(courses[i*8+1].couName[6],"数字逻辑");strcpy(courses[i*8+1].couName[7],"C语言实训1");strcpy(courses[i*8+1].couNo[0],"B27010100");strcpy(courses[i*8+1].couNo[1],"B10060112");strcpy(courses[i*8+1].couNo[2],"B14010102");strcpy(courses[i*8+1].couNo[3],"B06010112");strcpy(courses[i*8+1].couNo[4],"B06050131");strcpy(courses[i*8+1].couNo[5],"B06020100");strcpy(courses[i*8+1].couNo[6],"B08052200");strcpy(courses[i*8+1].couNo[7],"B08010201");for(int j=0; j<8; j++)strcpy(courses[i*8+1].couSort[j],"必");courses[i*8+1].couCredit[0]=3;courses[i*8+1].couCredit[1]=4;courses[i*8+1].couCredit[2]=1;courses[i*8+1].couCredit[3]=6;courses[i*8+1].couCredit[4]=2.5;courses[i*8+1].couCredit[5]=4;courses[i*8+1].couCredit[6]=3.5;courses[i*8+1].couCredit[7]=1;courses[i*8+1].term=2;/*第三学期必修课的初始化*/courses[i*8+2].stuNo=students[i].stuNo;strcpy(courses[i*8+2].couName[0],"毛泽东思想");strcpy(courses[i*8+2].couName[1],"大学体育3");strcpy(courses[i*8+2].couName[2],"线性代数");strcpy(courses[i*8+2].couName[3],"大学物理C2");strcpy(courses[i*8+2].couName[4],"计算机组成B");strcpy(courses[i*8+2].couName[5],"面向对象D");strcpy(courses[i*8+2].couName[6],"数据结构1");strcpy(courses[i*8+2].couName[7],"C语言实训2");strcpy(courses[i*8+2].couName[8],"基础日语1");strcpy(courses[i*8+2].couNo[0],"B27040100");strcpy(courses[i*8+2].couNo[1],"B14010103");strcpy(courses[i*8+2].couNo[2],"B06010200");strcpy(courses[i*8+2].couNo[3],"B06050232");strcpy(courses[i*8+2].couNo[4],"B08040220");strcpy(courses[i*8+2].couNo[5],"B08010601");strcpy(courses[i*8+2].couNo[6],"B08050960");strcpy(courses[i*8+2].couNo[7],"B08010202");strcpy(courses[i*8+2].couNo[8],"B08052001");for(int j=0; j<9; j++)strcpy(courses[i*8+2].couSort[j],"必");courses[i*8+2].couCredit[0]=4;courses[i*8+2].couCredit[1]=1;courses[i*8+2].couCredit[2]=2;courses[i*8+2].couCredit[3]=2.5;courses[i*8+2].couCredit[4]=3.5;courses[i*8+2].couCredit[5]=3.5;courses[i*8+2].couCredit[6]=3;courses[i*8+2].couCredit[7]=1;courses[i*8+2].couCredit[8]=4;courses[i*8+2].term=3;/*第四学期必修课的初始化*/courses[i*8+3].stuNo=students[i].stuNo;strcpy(courses[i*8+3].couName[0],"马克思主义");strcpy(courses[i*8+3].couName[1],"大学体育4");strcpy(courses[i*8+3].couName[2],"概率论");strcpy(courses[i*8+3].couName[3],"数据库原理");strcpy(courses[i*8+3].couName[4],"操作系统原理A");strcpy(courses[i*8+3].couName[5],"软件导论c");strcpy(courses[i*8+3].couName[6],"Java高级设计");strcpy(courses[i*8+3].couName[7],"Web开发基础");strcpy(courses[i*8+3].couName[8],"软件英语沟通方法");strcpy(courses[i*8+3].couName[9],"基础日语2");strcpy(courses[i*8+3].couNo[0],"B27030100");strcpy(courses[i*8+3].couNo[1],"B14010104");strcpy(courses[i*8+3].couNo[2],"B06010300");strcpy(courses[i*8+3].couNo[3],"B08052500");strcpy(courses[i*8+3].couNo[4],"B08011410");strcpy(courses[i*8+3].couNo[5],"B08052600");strcpy(courses[i*8+3].couNo[6],"B08050600");strcpy(courses[i*8+3].couNo[7],"B08055600");strcpy(courses[i*8+3].couNo[8],"B08051020");strcpy(courses[i*8+3].couNo[9],"B08052002");for(int j=0; j<10; j++)strcpy(courses[i*8+3].couSort[j],"必");courses[i*8+3].couCredit[0]=3;courses[i*8+3].couCredit[1]=1;courses[i*8+3].couCredit[2]=3;courses[i*8+3].couCredit[3]=3.5;courses[i*8+3].couCredit[4]=3.5;courses[i*8+3].couCredit[5]=2;courses[i*8+3].couCredit[6]=2.5;courses[i*8+3].couCredit[7]=2.5;courses[i*8+3].couCredit[8]=2;courses[i*8+3].couCredit[9]=4;courses[i*8+3].term=4;/*第五学期必修课的初始化*/courses[i*8+4].stuNo=students[i].stuNo;strcpy(courses[i*8+4].couName[0],"网络技术");strcpy(courses[i*8+4].couName[1],"软件需求分析");strcpy(courses[i*8+4].couName[2],"Web高级开发");strcpy(courses[i*8+4].couName[3],"人机交互设计");strcpy(courses[i*8+4].couName[4],"信息安全A");strcpy(courses[i*8+4].couName[5],"移动通信B");strcpy(courses[i*8+4].couName[6],"数据库编程");strcpy(courses[i*8+4].couName[7],"物联网导论B");strcpy(courses[i*8+4].couName[8],"高级日语1");strcpy(courses[i*8+4].couNo[0],"B08011500");strcpy(courses[i*8+4].couNo[1],"B08054400");strcpy(courses[i*8+4].couNo[2],"B08056100");strcpy(courses[i*8+4].couNo[3],"B08050510");strcpy(courses[i*8+4].couNo[4],"B08041310");strcpy(courses[i*8+4].couNo[5],"B08031120");strcpy(courses[i*8+4].couNo[6],"B08055800");strcpy(courses[i*8+4].couNo[7],"B08071420");strcpy(courses[i*8+4].couNo[8],"B08052003");for(int j=0; j<9; j++)strcpy(courses[i*8+4].couSort[j],"必");courses[i*8+4].couCredit[0]=3.5;courses[i*8+4].couCredit[1]=3;courses[i*8+4].couCredit[2]=3.5;courses[i*8+4].couCredit[3]=3;courses[i*8+4].couCredit[4]=2.5;courses[i*8+4].couCredit[5]=2;courses[i*8+4].couCredit[6]=2.5;courses[i*8+4].couCredit[7]=2;courses[i*8+4].couCredit[8]=4;courses[i*8+4].term=5;/*第六学期必修课的初始化*/courses[i*8+5].stuNo=students[i].stuNo;strcpy(courses[i*8+5].couName[0],"移动应用高级开发");strcpy(courses[i*8+5].couName[1],"软件测试A");strcpy(courses[i*8+5].couName[2],"软件项目管理");strcpy(courses[i*8+5].couName[3],"移动应用开发基础");strcpy(courses[i*8+5].couName[4],"数字图像处理");strcpy(courses[i*8+5].couName[5],"前沿技术讲座");strcpy(courses[i*8+5].couName[6],"高级日语2");strcpy(courses[i*8+5].couNo[0],"B08051012");strcpy(courses[i*8+5].couNo[1],"B08054300");strcpy(courses[i*8+5].couNo[2],"B08054200");strcpy(courses[i*8+5].couNo[3],"B08051010");strcpy(courses[i*8+5].couNo[4],"B08020800");strcpy(courses[i*8+5].couNo[5],"B08050920");strcpy(courses[i*8+5].couNo[6],"B08052100");for(int j=0; j<7; j++)strcpy(courses[i*8+5].couSort[j],"必");courses[i*8+5].couCredit[0]=2.5;courses[i*8+5].couCredit[1]=2.5;courses[i*8+5].couCredit[2]=2;courses[i*8+5].couCredit[3]=2.5;courses[i*8+5].couCredit[4]=2.5;courses[i*8+5].couCredit[5]=2;courses[i*8+5].couCredit[6]=4;courses[i*8+5].term=6;/*第七学期必修课的初始化*/courses[i*8+6].stuNo=students[i].stuNo;strcpy(courses[i*8+6].couName[0],"企业开发实战");strcpy(courses[i*8+6].couName[1],"毕业实习");strcpy(courses[i*8+6].couNo[0],"B08995001");strcpy(courses[i*8+6].couNo[1],"B08990710");for(int j=0; j<2; j++)strcpy(courses[i*8+6].couSort[j],"必");courses[i*8+6].couCredit[0]=15;courses[i*8+6].couCredit[1]=4;courses[i*8+6].term=7;/*第八学期必修课的初始化*/courses[i*8+7].stuNo=students[i].stuNo;strcpy(courses[i*8+7].couName[0],"毕业设计");strcpy(courses[i*8+7].couNo[0],"B08990811");strcpy(courses[i*8+7].couSort[0],"必");courses[i*8+7].couCredit[0]=15;courses[i*8+7].term=8;}FILE* fp;if((fp=fopen("course.txt","wb+"))==NULL){printf("Can't open the file of course!");exit(0);}fwrite(courses,sizeof(course),n*8,fp);fclose(fp);fclose(fp1);system("pause");free(courses);free(students);return 0;
}
/**
*Function:      menu402
*Description:   录入选修课程信息,由student.txt文件长度得出学生数,从course.txt读出相应长度信息,
*               添加选修信息并重新写入。
*Calls:         无
*Called By:     choose4
*Files Accessed:student.txt,course.txt
*Files Updated: course.txt
*Input:         choice3
*Output:        课程信息格式提醒,操作提示
*Return:        0
*/
int menu402(int choice3)
{if(choice3==1||choice3==2){printf("必修课已为基本信息内每位学生选好,只需输入学生自己选的课程信息即可。\n");printf("大一无法选课!\n");system("pause");}else{int stuNum;char couNum[10];char couName[20];float couCredit;int len;int n;int term[8]= {6,8,9,10,9,7,2,1};FILE *fp1;if((fp1=fopen("student.txt","rb"))==NULL){printf("Can't open the file of stuent!\n");printf("请先输入学生基本信息\n");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(student);course *courses=NULL;courses=(course*)malloc(sizeof(course)*len*8);FILE* fp;if((fp=fopen("course.txt","rb+"))==NULL){printf("Can't open the file of course!");exit(0);}fread(courses,sizeof(course),len*8,fp);printf("必修课已为基本信息内每位学生选好,只需输入学生自己选的课程信息即可。\n");printf("请输入要输入的选修课程信息的条数:\n");scanf("%d",&n);printf("请按约定的格式输入学生及课程信息:\n");for(int j=0; j<n; j++){printf("学号(int) 课程编号(char[10]) 课程名称(char[20]) 课程学分(float)\n");scanf("%d %s %s %f",&stuNum,&couNum,&couName,&couCredit);for(int i=0; i<len*8; i++)if(courses[i].stuNo==stuNum&&courses[i].term==choice3){strcpy(courses[i].couNo[term[choice3-1]],couNum);strcpy(courses[i].couName[term[choice3-1]],couName);courses[i].couCredit[term[choice3-1]]=couCredit;strcpy(courses[i].couSort[term[choice3-1]],"选");printf("已成功保存以下信息:\n");printf("==================================================================\n");printf("学号\t\t学期\t课程编号\t课程名称\t课程学分\t必/选修课\n");printf("%d\t%d\t%s\t%s\t%.2f\t\t%s\t\n",courses[i].stuNo,courses[i].term,courses[i].couNo[term[choice3-1]],courses[i].couName[term[choice3-1]],courses[i].couCredit[term[choice3-1]],courses[i].couSort[term[choice3-1]]);printf("==================================================================\n");term[choice3-1]++;}}fwrite(courses,sizeof(course),len*8,fp);fclose(fp1);fclose(fp);system("pause");free(courses);}return 0;
}
/**
*Function:      menu403
*Description:   录入成绩信息,由student.txt得出学生人数并按此顺序输入成绩信息,部分信息由计算得出,
*               总测评成绩由业务课总成绩与品行表现成绩计算得出
*Calls:         无
*Called By:     choose4
*Files Accessed:student.txt,conduct.txt,score.txt,course.txt
*Files Updated: score.txt
*Input:         choice3
*Output:        成绩信息格式提醒,操作提示
*Return:        0
*/
int menu403(int choice3)
{int len;FILE *fp1;int a=0;float b=0;if((fp1=fopen("student.txt","rb+"))==NULL){printf("Can't open the file of stuent!\n");printf("请先输入学生基本信息\n");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(student);student *students=NULL;students=(student*)malloc(sizeof(student)*len);rewind(fp1);fread(students,sizeof(student),len,fp1);FILE *fp2;if((fp2=fopen("conduct.txt","rb+"))==NULL){printf("Can't open the file of conduct!\n");exit(0);}conduct* conducts=NULL;conducts=(conduct*)malloc(sizeof(conduct)*len*8);fread(conducts,sizeof(conduct),len*8,fp2);score *scores=NULL;scores=(score*)malloc(sizeof(score)*len*8);FILE* fp3;if((fp3=fopen("course.txt","rb"))==NULL){printf("Can't open the file of course!");exit(0);}course *courses=NULL;courses=(course*)malloc(sizeof(course)*len*8);fread(courses,sizeof(course),len*8,fp3);FILE* fp;if((fp=fopen("score.txt","rb+"))==NULL){if((fp=fopen("score.txt","wb+"))==NULL){printf("Can't open the file of score!");exit(0);}for(int i=0; i<len; i++){scores[i*8+0].stuNo=students[i].stuNo;scores[i*8+0].term=1;scores[i*8+0].againNum=0;scores[i*8+0].couSumScore=0;scores[i*8+0].sumScore=0;scores[i*8+1].stuNo=students[i].stuNo;scores[i*8+1].term=2;scores[i*8+1].againNum=0;scores[i*8+1].couSumScore=0;scores[i*8+1].sumScore=0;scores[i*8+2].stuNo=students[i].stuNo;scores[i*8+2].term=3;scores[i*8+2].againNum=0;scores[i*8+2].couSumScore=0;scores[i*8+2].sumScore=0;scores[i*8+3].stuNo=students[i].stuNo;scores[i*8+3].term=4;scores[i*8+3].againNum=0;scores[i*8+3].couSumScore=0;scores[i*8+3].sumScore=0;scores[i*8+4].stuNo=students[i].stuNo;scores[i*8+4].term=5;scores[i*8+4].againNum=0;scores[i*8+4].couSumScore=0;scores[i*8+4].sumScore=0;scores[i*8+5].stuNo=students[i].stuNo;scores[i*8+5].term=6;scores[i*8+5].againNum=0;scores[i*8+5].couSumScore=0;scores[i*8+5].sumScore=0;scores[i*8+6].stuNo=students[i].stuNo;scores[i*8+6].term=7;scores[i*8+6].againNum=0;scores[i*8+6].couSumScore=0;scores[i*8+6].sumScore=0;scores[i*8+7].stuNo=students[i].stuNo;scores[i*8+7].term=8;scores[i*8+7].againNum=0;scores[i*8+7].couSumScore=0;scores[i*8+7].sumScore=0;}}else{fread(scores,sizeof(score),len*8,fp);}printf("请按以下学生顺序依次录入:\n");printf("==============================================================\n");for(int i=0; i<len; i++)printf("%d ",scores[i*8+0].stuNo);printf("\n");printf("==============================================================\n");printf("请按约定的格式输入如下成绩信息:(没有选修课的在对应地方标记为-1)\n");switch(choice3){case 1:printf("近代史纲要 大学英语A1 大学体育1 高等数学A1 软件导论 c语言设计 \n");for(int i=0; i<len*8; i=i+8){if(scores[i].term==1){b=0;for(int j=0; j<6; j++){scanf("%f",&scores[i].couScore[j]);if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1)b+=courses[i].couCredit[j];if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60){strcpy(scores[i].again[j],"是");scores[i].againNum++;}elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 2:printf("思修与法律 大学英语A2 大学体育2 高等数学A2 大物C1 离散数学 数字逻辑 C实训1\n");for(int i=1; i<len*8; i=i+8){if(scores[i].term==2){b=0;for(int j=0; j<8; j++){scanf("%f",&scores[i].couScore[j]);if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1)b+=courses[i].couCredit[j];if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 3:printf(" 毛概 大学体育3 线性代数 大学物理C2 计算机组成B 面向对象D 数据结构1 C语言实训2 基础日语1 选修1 选修2 选修3\n");for(int i=2; i<len*8; i=i+8){if(scores[i].term==3){a=0;b=0;for(int j=0; j<12; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 4:printf("马原 大学体育4 概率论 数据库原理 操作系统原理A 软件导论c Java高级设计 Web开发基础 软件英语沟通方法 基础日语2 选修1 选修2 选修3 \n");for(int i=3; i<len*8; i=i+8){if(scores[i].term==4){a=0;b=0;for(int j=0; j<13; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 5:printf("网络技术 软件需求分析 Web高级开发 人机交互设计 信息安全A 移动通信B 数据库编程 物联网导论B 高级日语1 选修1 选修2 选修3\n");for(int i=4; i<len*8; i=i+8){if(scores[i].term==5){a=0;b=0;for(int j=0; j<12; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 6:printf("移动应用高级开发 软件测试A 软件项目管理 移动应用开发基础 数字图像处理 前沿技术讲座 高级日语2 选修1 选修2 选修3 \n");for(int i=5; i<len*8; i=i+8){if(scores[i].term==6){a=0;b=0;for(int j=0; j<10; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 7:printf("企业开发实战 毕业实习 选修1 选修2 选修3\n");for(int i=6; i<len*8; i=i+8){if(scores[i].term==7){a=0;b=0;for(int j=0; j<5; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;case 8:printf("毕业设计 选修1 选修2 选修3\n");for(int i=7; i<len*8; i=i+8){if(scores[i].term==8){a=0;b=0;for(int j=0; j<4; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j]*courses[i].couCredit[j];if(scores[i].couScore[j]!=-1){a++;b+=courses[i].couCredit[j];}if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");scores[i].couSumScore/=b;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;}}break;}}rewind(fp);fwrite(scores,sizeof(score),len*8,fp);printf("操作成功!");fclose(fp);fclose(fp1);fclose(fp2);fclose(fp3);system("pause");free(scores);free(students);free(conducts);free(courses);return 0;
}
/**
*Function:      menu404
*Description:   录入奖惩信息
*Calls:         无
*Called By:     choose4
*Files Accessed:rAndP.txt
*Files Updated: rAndP.txt
*Input:         choice3
*Output:        奖惩信息格式提醒,操作提示
*Return:        0
*/int menu404 (int choice3)
{int n;printf("请输入要录入奖惩信息的奖惩数:\n");scanf("%d",&n);rAndP* rAndPs=NULL;rAndPs=(rAndP*)malloc(sizeof(rAndP)*n);FILE* fp;if((fp=fopen("rAndP.txt","wb+"))==NULL){printf("Can't open the file of rAndP!");exit(0);}printf("无信息处以‘0’标记,惩处学分前要带‘-’。\n");printf("请按约定的格式输入奖惩信息:\n");printf("学号(int) 获奖类别(char[17]) 获奖时间(char[11]) 奖励学分(float) 惩处类别(char[17]) 惩处时间(char[11]) 惩处学分(float)\n");for(int i=0; i<n; i++){scanf("%d %s %s %f %s %s %f",&rAndPs[i].stuNo,&rAndPs[i].rewards,&rAndPs[i].rTime,&rAndPs[i].rCredit,&rAndPs[i].punishment,&rAndPs[i].pTime,&rAndPs[i].pCredit);rAndPs[i].term=choice3;}fwrite(rAndPs,sizeof(rAndP),n,fp);fseek(fp,0L,2);int len=ftell(fp)/sizeof(rAndP);rewind(fp);fread(rAndPs,sizeof(rAndP),len,fp);printf("已成功保存以下所有信息:\n");printf("=====================================================================================================================\n");printf("学号\t\t学期\t获奖类别\t获奖时间\t奖励学分\t惩处类别\t惩处时间\t惩处学分\t\n");for(int i=0; i<len; i++)printf("%d\t%d\t%s\t\t%s\t%.2f\t\t%s\t%s\t%.2f\t%.2f\n",rAndPs[i].stuNo,rAndPs[i].term,rAndPs[i].rewards,rAndPs[i].rTime,rAndPs[i].rCredit,rAndPs[i].punishment,rAndPs[i].pTime,rAndPs[i].pCredit);printf("=====================================================================================================================\n");fclose(fp);system("pause");free(rAndPs);return 0;
}
/**
*Function:      menu405
*Description:   录入品行表现信息,基于学生基本信息学号与顺序录入品行表现信息
*Calls:         无
*Called By:     choose4
*Files Accessed:student.txt,conduct.txt
*Files Updated: course.txt
*Input:         choice3
*Output:        品行表现信息格式提醒,操作提示
*Return:        0
*/
int menu405(int choice3)
{int len;FILE *fp1;if((fp1=fopen("student.txt","rb+"))==NULL){printf("Can't open the file of stuent!\n");printf("请先输入学生基本信息\n");exit(0);}fseek(fp1,0L,2);len=ftell(fp1)/sizeof(student);student *students=NULL;students=(student*)malloc(sizeof(student)*len);conduct* conducts=NULL;conducts=(conduct*)malloc(sizeof(conduct)*len*8);FILE* fp2;if((fp2=fopen("conduct.txt","rb+"))==NULL){if((fp2=fopen("conduct.txt","wb+"))==NULL){printf("Can't open the file of conduct!\n");exit(0);}}else fread(conducts,sizeof(conduct),len*8,fp2);rewind(fp2);rewind(fp1);fread(students,sizeof(student),len,fp1);for(int i=0; i<len; i++){conducts[i*8+0].stuNo=students[i].stuNo;conducts[i*8+0].term=1;conducts[i*8+1].stuNo=students[i].stuNo;conducts[i*8+1].term=2;conducts[i*8+2].stuNo=students[i].stuNo;conducts[i*8+2].term=3;conducts[i*8+3].stuNo=students[i].stuNo;conducts[i*8+3].term=4;conducts[i*8+4].stuNo=students[i].stuNo;conducts[i*8+4].term=5;conducts[i*8+5].stuNo=students[i].stuNo;conducts[i*8+5].term=6;conducts[i*8+6].stuNo=students[i].stuNo;conducts[i*8+6].term=7;conducts[i*8+7].stuNo=students[i].stuNo;conducts[i*8+7].term=8;}printf("请按以下学生顺序依次录入:\n");printf("==============================================================\n");for(int i=0; i<len; i++)printf("%d ",conducts[i*8+0].stuNo);printf("\n");printf("==============================================================\n");printf("请按约定的格式输入品行表现信息:\n");printf("辅导员评议(float) 班主任评议(float) 班级评议(float)\n");for(int i=0; i<len*8; i++){if(conducts[i].term==choice3){scanf("%f %f %f",&conducts[i].counsellor,&conducts[i].classTeacher,&conducts[i].classmates);conducts[i].conSum=(conducts[i].counsellor+conducts[i].classTeacher+conducts[i].classmates)/3.0;}}fwrite(conducts,sizeof(conduct),len*8,fp2);rewind(fp2);fread(conducts,sizeof(conduct),len*8,fp2);printf("您成功输入了以下信息:\n");printf("==========================================================================================\n");printf("学号\t\t学期\t辅导员评议\t班主任评议\t班级评议\t品行表现成绩总成绩\t\n");for(int i=choice3-1; i<len*8; i+=8)if(conducts[i].term==choice3)printf("%d\t%d\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n",conducts[i].stuNo,conducts[i].term,conducts[i].counsellor,conducts[i].classTeacher,conducts[i].classmates,conducts[i].conSum);printf("==========================================================================================\n");fclose(fp2);fclose(fp1);free(students);system("pause");free(conducts);return 0;
}/**
*Function:      menu406
*Description:   修改个人信息
*Calls:         无
*Called By:     choose4
*Files Accessed:student.txt
*Files Updated: student.txt
*Input:         choice3
*Output:        个人信息格式提醒,操作提示
*Return:        无
*/
void menu406(int choice3)
{int num;int len;int flag=0;FILE *fp;if((fp=fopen("student.txt","rb+"))==NULL){printf("Can't open the file of stuent!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(student);rewind(fp);student *students=NULL;students=(student*)malloc(sizeof(student)*len);fread(students,sizeof(student),len,fp);rewind(fp);printf("===========================================\n");printf("学号\t\t姓名\t宿舍号\t性别\t 年龄\t\n");for(int i=0; i<len; i++)printf("%d\t%s\t%s\t%s\t%d\n",students[i].stuNo,students[i].stuName,students[i].dormitory,students[i].sex,students[i].age);printf("===========================================\n");printf("请输入要修改的个人信息的学号:\n");scanf("%d",&num);for(int i=0; i<len; i++)if(students[i].stuNo==num){printf("您要修改的学生名是:%s\n",students[i].stuName);printf("请按约定的格式重新输入个人信息:\n");printf("学号(int) 姓名(char[9]) 宿舍号(char[7]) 性别(char[3]) 年龄(int)\n");scanf("%d %s %s %s %d",&students[i].stuNo,&students[i].stuName,&students[i].dormitory,&students[i].sex,&students[i].age);flag=1;}fwrite(students,sizeof(student),len,fp);if(flag==0)printf("未找到!");free(students);fclose(fp);printf("操作成功!");system("pause");
}
/**
*Function:      menu407
*Description:   修改课程信息
*Calls:         无
*Called By:     choose4
*Files Accessed:course.txt
*Files Updated: course.txt
*Input:         choice3
*Output:        课程信息格式提醒,操作提示
*Return:        无
*/
void menu407(int choice3)
{int stunum;char cournum[10];int len;int flag=0;printf("请输入要修改的课程信息的所属人学号、课程号:\n");scanf("%d %s",&stunum,&cournum);FILE* fp;if((fp=fopen("course.txt","rb+"))==NULL){printf("Can't open the file of course!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(course);rewind(fp);course *courses=NULL;courses=(course*)malloc(sizeof(course)*len);fread(courses,sizeof(course),len,fp);rewind(fp);for(int i=0; i<len; i++)for(int j=0; j<14; j++)if(courses[i].stuNo==stunum&&strcmp(courses[i].couNo[j],cournum)==0&&courses[i].term==choice3){printf("这是原来课程的信息:\n");printf("==========================================================================================\n");printf("学号(int)\t课程编号(char[10])\t课程名称(char[20])\t课程学分(float)\t必/选修课(char[3])\n");printf("%d\t%s\t%s\t%.2f\t%s",courses[i].stuNo,courses[i].couNo[j],courses[i].couName[j],courses[i].couCredit[j],courses[i].couSort[j]);printf("\n==========================================================================================\n");printf("\n请按约定的格式重新输入课程信息:\n");printf("学号(int) 课程编号(char[10]) 课程名称(char[20]) 课程学分(float) 必/选修课(char[3])\n");scanf("%d %s %s %f %s",&courses[i].stuNo,&courses[i].couNo[j],&courses[i].couName[j],&courses[i].couCredit[j],&courses[i].couSort[j]);printf("请稍候");courses[i].term=choice3;flag=1;}fwrite(courses,sizeof(course),len,fp);if(flag==0)printf("\n未找到!\n");fclose(fp);free(courses);printf("\n操作完成!\n");system("pause");
}
/**
*Function:      menu408
*Description:   修改成绩信息
*Calls:         无
*Called By:     choose4
*Files Accessed:score.txt
*Files Updated: score.txt
*Input:         choice3
*Output:        成绩信息格式提醒,操作提示
*Return:        无
*/
void menu408(int choice3)
{int stunum;char cournum[10];int len;int flag=0;int a=0;printf("请输入要修改的成绩信息的所属人学号\n");scanf("%d",&stunum);FILE* fp;if((fp=fopen("score.txt","rb+"))==NULL){printf("Can't open the file of score!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(score);rewind(fp);score *scores=NULL;scores=(score*)malloc(sizeof(score)*len);fread(scores,sizeof(score),len,fp);rewind(fp);FILE *fp2;if((fp2=fopen("conduct.txt","rb+"))==NULL){printf("Can't open the file of conduct!\n");exit(0);}conduct* conducts=NULL;conducts=(conduct*)malloc(sizeof(conduct)*len);fread(conducts,sizeof(conduct),len,fp2);for(int i=0; i<len; i++)if(scores[i].stuNo==stunum&&scores[i].term==choice3){printf("您要修改的成绩所属人学号为:%d,学期为%d\n",scores[i].stuNo,scores[i].term);switch(choice3){case 1:printf("==============================================================\n");printf("近代史纲要\t大学英语A1\t大学体育1\t高等数学A1\t软件导论\tc语言设计 \n");for(int j=0; j<6; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("近代史纲要 大学英语A1 大学体育1 高等数学A1 软件导论 c语言设计 \n");for(int j=0; j<6; j++){scanf("%f",&scores[i].couScore[j]);if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60){strcpy(scores[i].again[j],"是");scores[i].againNum++;}elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=6.0;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 2:printf("==============================================================\n");printf("思修与法律\t大学英语A2\t大学体育2\t高等数学A2\t大物C1\t离散数学\t数字逻辑\tC实训1\n");for(int j=0; j<8; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("思修与法律 大学英语A2 大学体育2 高等数学A2 大物C1 离散数学 数字逻辑 C实训1\n");for(int j=0; j<8; j++){scanf("%f",&scores[i].couScore[j]);if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=8.0;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 3 :printf("==============================================================\n");printf(" 毛概\t大学体育3\t线性代数\t大学物理C2\t计算机组成B\t面向对象D\t数据结构1\tC语言实训2\t基础日语1\t选修1\t选修2\t选修3\n");for(int j=0; j<12; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf(" 毛概 大学体育3 线性代数 大学物理C2 计算机组成B 面向对象D 数据结构1 C语言实训2 基础日语1 选修1 选修2 选修3\n");a=0;for(int j=0; j<12; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 4:printf("==============================================================\n");printf("马原\t大学体育4\t概率论\t数据库原理\t操作系统原理A\t软件导论c\tJava高级设计\tWeb开发基础\t软件英语沟通方法\t基础日语2\t选修1\t选修2\t选修3 \n");for(int j=0; j<13; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("马原 大学体育4 概率论 数据库原理 操作系统原理A 软件导论c Java高级设计 Web开发基础 软件英语沟通方法 基础日语2 选修1 选修2 选修3 \n");a=0;for(int j=0; j<13; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 5:printf("==============================================================\n");printf("网络技术\t软件需求分析\tWeb高级开发\t人机交互设计\t信息安全A\t移动通信B\t数据库编程\t物联网导论B\t高级日语1\t选修1\t选修2\t选修3\n");for(int j=0; j<12; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("网络技术 软件需求分析 Web高级开发 人机交互设计 信息安全A 移动通信B 数据库编程 物联网导论B 高级日语1 选修1 选修2 选修3\n");a=0;for(int j=0; j<12; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 6:printf("==============================================================\n");printf("移动应用高级开发\t软件测试A\t软件项目管理\t移动应用开发基础\t数字图像处理\t前沿技术讲座\t高级日语2\t选修1\t选修2\t选修3 \n");for(int j=0; j<10; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("移动应用高级开发 软件测试A 软件项目管理 移动应用开发基础 数字图像处理 前沿技术讲座 高级日语2 选修1 选修2 选修3 \n");a=0;for(int j=0; j<10; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 7:printf("==============================================================\n");printf("企业开发实战\t毕业实习\t选修1\t选修2\t选修3\n");for(int j=0; j<5; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("企业开发实战 毕业实习 选修1 选修2 选修3\n");a=0;for(int j=0; j<5; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;case 8:printf("==============================================================\n");printf("毕业设计\t选修1\t选修2\t选修3\n");for(int j=0; j<4; j++)printf("%.2f\t\t",scores[i].couScore[j]);printf("\n==============================================================\n");printf("\n请按约定的格式重新输入成绩信息:\n");printf("毕业设计 选修1 选修2 选修3\n");a=0;for(int j=0; j<4; j++){scanf("%f",&scores[i].couScore[j] );if(scores[i].couScore[j]>100||(scores[i].couScore[j]<0&&scores[i].couScore[j]!=-1)){printf("输入成绩有误,请重新输入:\t");j--;}elsescores[i].couSumScore+=scores[i].couScore[j];if(scores[i].couScore[j]!=-1)a++;if(scores[i].couScore[j]>-1&&scores[i].couScore[j]<60)strcpy(scores[i].again[j],"是");elsestrcpy(scores[i].again[j],"否");}scores[i].couSumScore/=a;scores[i].sumScore=0.8*scores[i].couSumScore+0.2*conducts[i].conSum;break;flag=1;}fwrite(scores,sizeof(score),len,fp);if(flag==0)printf("未找到!");fclose(fp);fclose(fp2);free(scores);free(conducts);printf("操作完成!");system("pause");}
}
/**
*Function:      menu409
*Description:   修改奖惩信息
*Calls:         无
*Called By:     choose4
*Files Accessed:rAndP.txt
*Files Updated: rAndP.txt
*Input:         choice3
*Output:        奖惩信息格式提醒,操作提示
*Return:        0
*/
void menu409(int choice3)
{int num;int len;int flag=0;printf("请输入要修改的奖惩信息的所属人学号:\n");scanf("%d",&num);FILE* fp;if((fp=fopen("rAndP.txt","rb+"))==NULL){printf("Can't open the file of rAndP!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(rAndP);rewind(fp);rAndP* rAndPs=NULL;rAndPs=(rAndP*)malloc(sizeof(rAndP)*len);fread(rAndPs,sizeof(rAndP),len,fp);rewind(fp);for(int i=0; i<len; i++){if(num==rAndPs[i].stuNo){printf("无信息处以‘0’标记,惩处学分前要带‘-’。\n");printf("您要修改的奖惩信息的所属人学号为:%d\n",rAndPs[i].stuNo);printf("请按约定的格式重新输入奖惩信息:\n");printf("学号(int) 获奖类别(char[17]) 获奖时间(char[11]) 奖励学分(float) 惩处类别(char[17]) 惩处时间(char[11]) 惩处学分(float)\n");scanf("%d %s %s %f %s %s %f",&rAndPs[i].stuNo,&rAndPs[i].rewards,&rAndPs[i].rTime,&rAndPs[i].rCredit,&rAndPs[i].punishment,&rAndPs[i].pTime,&rAndPs[i].pCredit);rAndPs[i].term=choice3;flag=1;}}fwrite(rAndPs,sizeof(rAndP),len,fp);if(flag==0)printf("未找到!");free(rAndPs);fclose(fp);printf("操作成功!");system("pause");
}
/**
*Function:      menu4010
*Description:   修改品行表现信息
*Calls:         无
*Called By:     choose4
*Files Accessed:conduct.txt
*Files Updated: conduct.txt
*Input:         choice3
*Output:        品行表现信息格式提醒,操作提示
*Return:        无
*/
void menu4010(int choice3)
{int num;int len;int flag=0;printf("请输入要修改的品行表现信息的所属人学号:\n");scanf("%d",&num);FILE* fp;if((fp=fopen("conduct.txt","rb+"))==NULL){printf("Can't open the file of conduct!");exit(0);}fseek(fp,0L,2);len=ftell(fp)/sizeof(conduct);rewind(fp);conduct *conducts=NULL;conducts=(conduct*)malloc(sizeof(conduct)*len*8);fread(conducts,sizeof(conduct),len*8,fp);rewind(fp);for(int i=0; i<len*8; i++)if(conducts[i].stuNo==num&&conducts[i].term==choice3){printf("您要修改的品行表现信息的所属人学号为:%d\n",conducts[i].stuNo);printf("请按约定的格式重新输入品行表现信息:\n");printf("学号(int) 辅导员评议(float) 班主任评议(float) 班级评议(float)\n");scanf("%d %f %f %f",&conducts[i].stuNo,&conducts[i].counsellor,&conducts[i].classTeacher,&conducts[i].classmates);conducts[i].conSum=(conducts[i].counsellor+conducts[i].classTeacher+conducts[i].classmates)/3;flag=1;}fwrite(conducts,sizeof(conduct),len*8,fp);if(flag==0)printf("未找到!");fclose(fp);free(conducts);printf("操作成功!");system("pause");
}
/**
*Function:      menu4011
*Description:   显示要查询的某学期的具体内容
*Calls:         各功能函数
*Called By:     menu4
*Input:         choice4011,choice3
*Output:        显示要查询的某学期的具体内容
*Return:        无
*/
void menu4011(int choice3)
{int choice4011;while(1){printf("\n");printf("\t┌───────────────────────────┐\n");printf("\t│\t\t\t\t\t\t\t│\n");printf("\t│\t\t     查询第%d学期信息\t\t\t│\n",choice3);printf("\t│\t\t**********************\t\t\t│\n");printf("\t│\t\t  1.某同学各课程班级排名\t\t│\n");printf("\t│\t  2.某同学过往学期业务课班级排名、挂科次数\t│\n");printf("\t│\t  3.按业务课成绩平均分对宿舍由高到低排序 \t│\n");printf("\t│\t  4.按业务课成绩平均分对学生由高到低排序 \t│\n");printf("\t│\t     5.按不及格学生数对课程由高到低排序\t\t│\n");printf("\t│\t     6.按不及格门次对学生由高到低排序\t\t│\n");printf("\t│\t     7.按惩罚对学生由高到低排序\t\t\t│\n");printf("\t│\t     8.按奖励对学生由高到低排序\t\t\t│\n");printf("\t│\t \t 9.某门课各分数段成绩统计\t\t│\n");printf("\t│\t \t 10.返回主菜单\t\t\t\t│\n");printf("\t│\t \t    0.退出程序\t\t\t\t│\n");printf("\t│\t\t***********************\t\t\t│\n");printf("\t│\t\t请选择: \t\t\t\t│\n");printf("\t│\t\t\t\t   \t\t\t│\n");printf("\t└───────────────────────────┘\n");scanf("%d",&choice4011);system ("cls");choose4011(choice3,choice4011);break;}
}
/**
*Function:      menu4
*Description:   按照choice1与choice2存储的信息显示相应的菜单
*Calls:         menu401~menu4011
*Called By:     choose2,choose3
*Input:         choice1,choice2,choice3
*Output:        引出不同的菜单
*Return:        无
*/
void menu4(int choice1,int choice2,int choice3)
{if(choice1==2)choice2+=5;switch(choice2){case 1:menu401();break;case 2:menu402(choice3);break;case 3:menu405(choice3);break;case 4:menu404(choice3);break;case 5:menu403(choice3);break;case 6:menu406(choice3);break;case 7:menu407(choice3);break;case 8:menu4010(choice3);break;case 9:menu409(choice3);break;case 10:menu408(choice3);break;case 11:menu4011(choice3);break;default:printf("输入有误!\n");system("pause");system("cls");break;}
}
/**
*Function:      choose3
*Description:   对三级菜单下的选择进行处理
*Calls:         menu4
*Called By:     menu3
*Input:         choice1,choice2,choice3
*Output:        输入不规范时有错误提示
*Return:        无
*/
void choose3(int choice1,int choice2,int choice3)
{switch(choice3){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:menu4(choice1,choice2,choice3);break ;case 9:break;case 0:exit(0);break;default:printf("输入有误!\n");system("pause");system("cls");break;}
}
/**
*Function:      menu3
*Description:   显示三级操作菜单,保留操作对象的学期信息在choice3中
*Calls:         choose3
*Called By:     choose1,choose2
*Input:         choice3
*Output:        输出一级菜单
*Return:        无
*/
void menu3(int choice1,int choice2)
{int choice3;                                                     /*choice3存储学期*/char a[3][5]= {{"录入"},{"修改"},{"查询"}};char b[11][9]= {{""},{"课程"},{"品行表现"},{"奖惩"},{"成绩"},{""},{""},{""},{""},{""},{""}};while(1){printf("\n");printf("\t┌───────────────────────────┐\n");printf("\t│\t\t\t\t\t\t\t│\n");printf("\t│\t\t\t  %s%s信息\t\t\t│\n",a[choice1-1],b[choice2-1]);printf("\t│\t\t \t **************\t\t\t│\n");printf("\t│\t\t \t 1.第一学期\t\t\t│\n");printf("\t│\t\t \t 2.第二学期 \t\t\t│\n");printf("\t│\t\t \t 3.第三学期\t\t\t│\n");printf("\t│\t\t \t 4.第四学期\t\t\t│\n");printf("\t│\t\t \t 5.第五学期\t\t\t│\n");printf("\t│\t\t \t 6.第六学期\t\t\t│\n");printf("\t│\t\t \t 7.第七学期\t\t\t│\n");printf("\t│\t\t \t 8.第八学期\t\t\t│\n");printf("\t│\t\t \t 9.返回主菜单\t\t\t│\n");printf("\t│\t\t \t 0.退出程序\t\t\t│\n");printf("\t│\t\t \t************** \t\t\t│\n");printf("\t│\t\t\t请选择: \t\t\t│\n");printf("\t│\t\t\t\t   \t\t\t│\n");printf("\t└───────────────────────────┘\n");scanf("%d",&choice3);system("cls");choose3(choice1,choice2,choice3);break;}
}
/**
*Function:      choose2
*Description:   对二级菜单下的选择进行处理
*Calls:         menu3;menu4;
*Called By:     menu2
*Input:         choice1,choice2
*Output:        输入不规范时有错误提示
*Return:        无
*/
void choose2(int choice1,int choice2)
{switch(choice2){case 1:menu4(choice1,choice2,1);break;case 2:case 3:case 4:case 5:menu3(choice1,choice2);break;case 6:break;case 0:exit(0);break;default:printf("输入有误!\n");system("pause");system("cls");break;}
}
/**
*Function:      menu2
*Description:   显示二级操作菜单,保留操作对象信息在choice2中
*Calls:         choose2
*Called By:     choose1
*Input:         choice1
*Output:        输出二级菜单
*Return:        无
*/
void menu2(int choice1)
{int choice2;                                //choice2存储操作对象while(1){char a[2][5]= {{"录入"},{"修改"}};printf("\n");printf("\t┌───────────────────────────┐\n");printf("\t│\t\t\t\t\t\t\t│\n");printf("\t│\t\t\t    %s信息\t\t\t│\n",a[choice1-1]);printf("\t│\t\t\t**************\t\t\t│\n");printf("\t│\t\t \t 1.个人信息\t\t\t│\n");printf("\t│\t\t \t 2.课程信息 \t\t\t│\n");printf("\t│\t\t \t 3.品行表现信息 \t\t│\n");printf("\t│\t\t \t 4.奖惩信息\t\t\t│\n");printf("\t│\t\t \t 5.成绩信息\t\t\t│\n");printf("\t│\t\t \t 6.返回主菜单\t\t\t│\n");printf("\t│\t\t \t 0.退出程序\t\t\t│\n");printf("\t│\t\t \t************** \t\t\t│\n");printf("\t│\t\t\t请选择: \t\t\t│\n");printf("\t│\t\t\t\t   \t\t\t│\n");printf("\t└───────────────────────────┘\n");scanf("%d",&choice2);system ("cls");choose2(choice1,choice2);break;}
}
/**
*Function: conduct     choose1
*Description:   对一级菜单下的选择进行处理
*Calls:         menu2;menu3;
*Called By:     menu1
*Input:         choice1
*Output:        输入不规范时有错误提示
*Return:        无
*/
void choose1(int choice1)
{switch(choice1){case 1:;case 2:menu2(choice1);break;case 3:menu3(choice1,11);break;case 4:break;case 0:exit(0);default:printf("输入有误!\n");system("pause");system("cls");break;}
}
/**
*Function:      menu1
*Description:   显示一级操作菜单,保留操作信息在choice1中
*Calls:         choose1
*Called By:     main
*Input:         choice1
*Output:        输出一级菜单
*Return:        无
*/
void menu1()                                      //choice1存储功能
{int choice1;while(1){printf("\n");printf("\t┌───────────────────────────┐\n");printf("\t│\t\t\t\t\t\t\t│\n");printf("\t│\t\t     欢迎使用班主任管家系统\t\t│\n");printf("\t│\t\t \t**************\t\t\t│\n");printf("\t│\t\t \t 1.录入信息\t\t\t│\n");printf("\t│\t\t \t 2.修改信息 \t\t\t│\n");printf("\t│\t\t \t 3.查询信息\t\t\t│\n");printf("\t│\t\t \t 0.退出程序\t\t\t│\n");printf("\t│\t\t \t************** \t\t\t│\n");printf("\t│\t\t\t请选择: \t\t\t│\n");printf("\t│\t\t\t\t   \t\t\t│\n");printf("\t└───────────────────────────┘\n");scanf("%d",&choice1);system("cls");choose1(choice1);system("cls");}
}
/*******************main函数***************************//**
*Function:      main
*Description:   调用menu1函数,通过menu1函数与其他函数的交互实现系统的功能
*Calls:         menu1
*Input:         对应导航的序号或相应信息
*Output:        显示导航与提示
*Return:        0
*/
int main()
{menu1();return 0;
}

C语言班主任管家系统相关推荐

  1. c语言班主任管家系统报告,[源码和文档分享]基于C语言的学生成绩管理系统

    一 需求分析 假设某班有不超过40人(具体人数在程序运行时由键盘录入)参加本学期的期末考试,考试科目为语文(CN),数学(MT),英语(EN),科学(SC).编写一个学生成绩管理系统,实现对班级学生成 ...

  2. C/C++班主任管家系统

    C/C++班主任管家系统 设计与开发班主任管家系统,巩固所学c语言基础知识,通过实际项目的开发过程培养综合解决问题的能力及编程能力等. 班主任管家软件以学生信息﹑课程信息为基础,以 品行表现成绩(辅导 ...

  3. JeeWx_2.4.2 版本发布,免费开源微信管家系统

    JeeWx_2.4.2 版本发布,免费开源微信管家系统 1. JEEWX系统介绍 Jeewx是一款开源.免费的微信管家系统,采用JAVA语言实现,支持微信公众号.微信企业号,Jeewx实现了微信平台管 ...

  4. 云相册管家系统——毕业设计

    目录 一.背景概述 二.效果演示 三.系统分析与设计 3.1,资源及工具 3.2,功能需求 3.3,系统部署 3.4,数据库设计 四.部分代码实现(C++部分比较多,放最后) 4.0,nginx 配置 ...

  5. 基于python的界面自动化测试-基于Python语言的自动化测试系统的设计与实现

    黄建军+李宥谋+刘婧+周欢 摘 要: 通过分析现代工业生产对自动化测试系统的要求,提出一种基于面向对象的编程语言Python构建的自动化测试系统.利用Python语言的高效.灵活和简洁等特点,结合Py ...

  6. C语言的成绩查询系统,c语言 成绩查询系统

    设计目标 1.掌握用c语言进行程序设计的基本方法. 2.熟悉运用windows对文本进行的加工. 3.初步完成一个应用程序的设计和编码,以及编码的调试,了解程序设计的过程,锻炼个人的逻辑思维和程序设计 ...

  7. ABAP语言常用的系统字段及函数

    ABAP语言常用的系统字段及函数 常用的系统变量如下: 1.SY-PAGNO当前页号 2.SY-DATUM当前时间 3.SY-LINSZ当前报表宽度 4.SY-LINCT当前报表长度 5.SPACE空 ...

  8. c语言课程描述英文版,c语言学生选课系统(国外英文资料).doc

    c语言学生选课系统(国外英文资料) c语言学生选课系统(国外英文资料) # include < stdio, h > # include < string. H > # inc ...

  9. JEEWX捷微企业号管家系统发布

    一.微信企业号简介 1微信企业号是什么? 企业号,是微信为企业用户提供的移动应用入口,也可以连接组织与个体间相互认可且稳定的关系. 2企业号与公众号有什么不同? 企业号只有限定范围内的用户才可以关注对 ...

  10. c语言考试系统开发,基于WEB的(C语言)网络考试系统的开发与研究

    摘要: 随着社会信息化程度的不断提高,计算机应用能力的培训得到迅猛发展,考核中使用的传统手工阅卷己经逐渐走向计算机自动评阅.目前自动阅卷已经能很好地完成对常见客观试题的自动批阅工作,但是对于一些主观性 ...

最新文章

  1. mysql中count的用法
  2. 用软件lm_sensors监测Linux系统和CPU温度(转)
  3. PHP实现支付宝即时到账功能
  4. python学习笔记-flask学习(一)route适配器
  5. pivot sqlserver 条件_行转列之SQLSERVERPIVOT与用法详解
  6. 一步步编写操作系统 76 用汇编语言编写字符打印函数
  7. 23种设计模式之装饰模式
  8. hibernate_Restrictions用法 .
  9. 用wxpython编写登录界面_wxpython+pymysql实现用户登陆功能
  10. python使用matplotlib可视化矢量流场图、使用streamplot函数可视化矢量流场图、矢量流场图包含坐标和方向
  11. 计算机网络(谢希仁)第六版课件
  12. Autodesk 3DSMax 2012 安装说明
  13. sql compare mysql版本_SQL Compare 13免费版
  14. 吴恩达新课快来了!万字博客回顾机器学习算法起源
  15. 从零开始制作一款打卡类小程序
  16. 105道Java面试题
  17. Java 中怎么打印数组?
  18. linux mint必装软件,Linux mint 系统实用软件推荐和安装
  19. python阶乘函数_python 阶乘函数
  20. 【BYM】Android 仿百度搜索列表滑动效果,flutter环境搭建

热门文章

  1. php全套之七,php程序员工具箱
  2. 目标检测综述学习笔记
  3. android 加载动画下载,AVLoadingIndicatorView
  4. java经纬度转换小数_java经纬度格式转换
  5. pcm5102a解码芯片音质评测_鱼和熊掌兼得——一台可以换芯片的PCM1794解码评测(上)...
  6. PCB----LayOut的一些准则
  7. Android平台语音交友软件源码开发,语音通话的实现
  8. 暨南大学人文社科a类期刊_暨南大学A类期刊目录.pdf
  9. positionViewHolder{a1bbfa3 position=2 id=-1, oldPos=-1, pLpos:-1 no parent}
  10. keras画神经网络拓扑结构图