成绩管理系统V6.0
- 格式:docx
- 大小:221.97 KB
- 文档页数:19
Harbin Institute of Technology C语言实验大作业
课程名称: C语言程序设计 报告类型: 程序设计报告 实验题目: 学生成绩管理系统v6.0 实验类型: (综合设计型/创新研究型) 所在院系: 航天学院电子信息类 学生类别: 本科生 指导教师: 郭萍 学生姓名: 王福海 班级和学号: 电子信息五班 1162100527 实验时间: 2017.5.20 成绩评定:
哈尔滨工业大学 1 实验目的 将教材中所包含的内容系统化考察,考察一维、二维数组,函数的调用,排序、查找、统计分析等常用算法,指针,动态数组以及结构体的应用。
2 实验内容和要求 1.实验内容 学生成绩管理系统V6.0。某班有最多不超过30人(具体人数由键盘输入)参加最多不超过六门的考试(具体门数由键盘输入),定义结构体类型,用结构体数组作函数参数,编程实现学生成绩的管理。 2.实验要求 采用自顶向下、逐步求精的模块化设计思想设计小型数据库管理系统,对学生成绩进行管理。要求按系统的需求分析、系统设计(总体设计、各个模块的设计)、系统实现(各个模块的实现)、系统测试等过程组织报告内容,说明采用了什么数据结构和算法,遇到哪些问题,这些问题是如何解决的,本设计的亮点和难点在哪里,实验结果如何,有哪些收获和学习体会。 3.系统功能需求分析 本系统主要实现下面的功能: (1)录入每个学生的学号和考试成绩; (2)计算每门课程的总分和平均分; (3)计算每个学生的总分和平均分; (4)按成绩由高到低排出名次表; (5)按成绩由低到高排出名次表; (6)按学号由小到大排出成绩表; (7)按姓名字典的排序排出成绩表; (8)按学号查询学生排名及其考试成绩; (9)按姓名查询学生排名及其考试成绩; (10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数以及所占的百分比; (11)输出每个学生学号姓名各科成绩及每门考试的总分平均分; (12)将每个学生信息写入文件; (13)从文件中读取每个学生信息并显示; 4.实验环境 采用win10操作系统,使用软件Dev-c++。 3 系统设计 1. 系统功能模块划分
2. 主要算法 排序:进行学生成绩的排序从而出现排名表 查找:通过多种方式如学号,姓名查找特定学生的成绩 3. 数据结构
用户输入指令
学生成绩管理系统 五个档次
录 入 成 绩
计算总分平均分 排 名 排 序 标 准 分 析
录入文件读取文件
每个学生
每门课
按学号排序 按学生成绩排名 按姓名排序
按姓名查询学生排名及其考试成绩
输出每个学生学号姓名各科成绩及每门考试的总分平均分
5个类别,统计每个类别的人数以及所占的百分比
录入每个学生的学号和考试成绩
计算每门课程的总分
和平均分
将每个学生信息写入文件从文件中读取每个学生信息并显示
按学号由小到大排出成绩表
按学号查询学生排名及其考试成绩
计算每个学生的总分和平均分 按成绩由高到低排出
名次表
按成绩由低到高排出名次表
按姓名字典的排序排出成绩表 4.各模块(函数)的功能和接口设计: 序号 函数名 函数功能 函数参数 1 Menu 显示菜单获得输入的选项 无
2 Readscore 录入学生信息 STU stu[], m,n 3 Aversumofeverystudent 计算每个学生总成绩平均值 STU stu[], m,n
4 Aversumofeverycourse 计算每门课程总成绩平均成绩 STU stu[], m,n 5 Sortbyscore 按成绩排序 STU stu[], m,n 6 Ascending 升序 float a,b 7 Descending 降序 float a,b 8 Assortbynum 按学号排序 STU stu[], m,n 9 Sortbyname 按姓名排序 STU stu[], m,n 10 Searchbynum 按学号查询学生信息 STU stu[], m,n
11 Searchbyname 按姓名查询学生信息 STU stu[], m,n 12 StatisticAnlysis(STU stu[], int n, int m) 分析学生成绩五个分数段所占百分比 STU stu[], m,n
13 PrintScore 打印输出学生成绩 STU stu[], m,n 14 WritetoFile 写入程序 D盘student.txt STU stu[], m,n 15 ReadfromFile 读取文件 STU stu[], m,n 4 系统实现 1.系统的总流程图: 显示菜单——>输入用户的选择——>根据用户的输入选择不同的操作 case 1: Readscore(stu,n,m); break; case 2: Aversumofeverystudent(stu ,n,m); break; case 3: Aversumofeverycourse(stu ,n,m); break; case 4: Sortbyscore(stu ,n,m,Descending); printf("\n成绩降序排序\n"); Printscore( stu ,n, m); break; case 5: Sortbyscore(stu ,n,m,Ascending); printf("\n成绩升序排序\n"); Printscore( stu ,n, m); break; case 6: Assortbynum( stu , n, m); printf("\n学号升序排序\n"); Printscore( stu ,n, m); break; case 7: Sortbyname( stu , n, m); printf("\n姓名升序排序\n"); Printscore( stu ,n, m); break; case 8: Searchbynum( stu , n, m); break; case 9: Searchbyname( stu , n, m); break; case 10: StatisticAnlysis( stu , n, m); break; case 11: Printscore( stu ,n, m); break; case 12: Writetofile(stu,n,m); break; case 13: Readfromfile(stu,&n,&m); break; case 0: printf("End of program!\n "); exit(0); 2. 程序的全部源代码: 1 #include 2 #include 3 #include 4 typedef struct student 5 { 6 long num; 7 char name[10]; 8 float score[6]; 9 float sum; 10 float aver; 11 }STU; 12 int Menu(void); 13 void ReadScore(STU stu[],int n, int m); 14 void AverSumofEveryStudent(STU stu[],int n,int m); 15 void AverSumofEveryCourse(STU stu[],int n,int m); 16 void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); 17 int Ascending(float a,float b); 18 int Descending(float a,float b); 19 void SwapFloat(float *x,float *y); 20 void SwapLong(long *x,long *y); 21 void SwapChar (char x[],char y[]); 22 void AsSortbyNum(STU stu[],int n,int m); 23 void SortbyName(STU stu[],int n,int m); 24 void SearchbyNum(STU stu[],int n,int m); 25 void SearchbyName(STU stu[],int n,int m); 26 void StatisticAnalysis(STU stu[],int n,int m); 27 void PrintScore(STU stu[],int n,int m); 28 void WritetoFile(STU stu[],int n,int m); 29 void ReadfromFile(STU stu[],int *n,int *m); 30 int main() 31 { 32 char ch; 33 int n=0,m=0; 34 35 STU stu[30]; 36 37 printf("Input student number:(less than 30)\n"); 38 scanf("%d",&n); 39 40 printf("Input course number:(less than 6)\n"); 41 scanf("%d",&m); 42 43 while(1) 44 { 45 ch = Menu(); 46 switch(ch) 47 { 48 case 1: ReadScore(stu,n,m); 49 break;