2022年C语言课程设计-学生成绩管理系统分析方案.docx
精品学习资源课程名称 课程设计报告题目同学成果治理系统学号姓名年级专业2021 电子信息工程同组人员指导老师完成日期2021年06月30日安徽师范高校物理与电子信息学院College of Physics and Electronic Information, AnhuiNormalUniversity一、 问题描述和基本要求1、每条记录包括:学号、姓名、专业和5 门课程的分数;2、能够实现添加、删除、修改功能;3、能够运算某同学的总分和平均分;4、能够照总分排序输出;二、 系统分析和设计仔细阅读系统要求,第一将此系统化分为如下模块:欢迎下载精品学习资源同学成果治理系统输入同学信息显示同学信息排序模块插入模块删除模块1、输入初始的同学信息:可用函数input来实现此操作;2、输出同学的信息以及成果:可通过函数output来实现,3、排序模块:可通过 sort来实现,通过比较总分的大小来排序;4、插入模块:可通过函数insert 来实现,其中通过学号的大小来比较,并且以此来排序;5、删除模块:可通过函数delete 来实现,其中通过输入学号来选择要删除的同学信息;5、退出系统:可通过一个函数 exit 来实现,输入“ 0”即退出此程序 ;三、程序流程图欢迎下载精品学习资源开头STUDENTdataMAXN ;a.='0'a='1'欢迎下载精品学习资源inputdata,&len;break;a='2'outputdata,len;break;a='3'sortdata,len;break;a='4'insertdata,&len;break;a='5'delete_itemdata,&l en;break;a.='n'break;欢迎下载精品学习资源a.='n'scanf"%c",&a;终止欢迎下载精品学习资源四、程序清单源程序:#include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXN 35#define MAX_NAME 128typedef struct student /*定义同学信息 */int no; /* 定义学号 */char nameMAX_NAME ; /* 定义姓名 */ char fieldMAX_NAME;/* 定义专业 */doublesubject1;/* 定义五个科目 */doublesubject2;doublesubject3;doublesubject4;doubledoublesubject5;mark_ave;/* 定义平均分 */doublemark_tot;/*定义总分 */ STUDENT ;/* 以下为输入信息程序 */void inputSTUDENT *data, int *lenint no;putchar'n';printf"%sn", "Please enter a new record, if need to exit the current menu please input - 1.";printf"%s", "Form: nno" ;printf"%s", " Name field subject1 subject2 subject3 subject4 subject5n"; scanf"%d", &no ;whileno .= -1data*len.no = no;scanf"%s %s %lf %lf %lf %lf %lf", data*len.name,data*len.field, &data*len.subject1,&data*len.subject2,&data*len.subject3, &data*len.subject4, &data*len.subject5 ;data*len.mark_ave=data*len.subject1+data*len.subject2+data*len.subj ect3+data*len.subject4+data*len.subject5/5.0;data*len.mark_tot=data*len.subject1+data*len.subject2+data*len.subje ct3+data*len.subject4+data*len.subject5;*len+ ;/*指针加一 */scanf"%d", &no ;/* 输入*/欢迎下载精品学习资源/* 以下为输出信息程序 */void outputSTUDENT *data, int lenint i;system"cls";/* 定义系统菜单 */ printf"%5s", "no" ;/*输出菜单 */ printf"%7s", "name" ;printf"%7s", "field" ;printf"%10s", "subject1" ;printf"%10s", "subject2" ;printf"%10s", "subject3" ;printf"%10s", "subject4" ;printf"%10s", "subject5" ;printf"%12s", "mark_ave" ;printf"%10s", "mark_tot" ;putchar'n';for i =0 ; i < 80; i+putchar'=';putchar'n';for i = 0 ; i< len; i+printf"%5d", datai.no ;printf"%8s", datai.name ;printf"%8s", datai.field ;printf"%8.1lf", datai.subject1 ;printf"%8.1lf", datai.subject2 ;printf"%10.1lf", datai.subject3 ;printf"%10.1lf", datai.subject4 ;printf"%10.1lf", datai.subject5 ;printf"%12.1lf", datai.mark_ave ;printf"%10.1lf", datai.mark_tot ;putchar'n';for i =0 ; i < 80; i+putchar'=';putchar'n';printf"Press Enter to continue.";getchar;getchar;/*以下为排序程序 */void sortSTUDENT *data, int len欢迎下载精品学习资源int i,j,k ;STUDENT temp;for i=0 ; i<len-1; i+for k=i, j=i+1 ; j<len; j+if datak.mark_tot < dataj.mark_tot k=j ;if k .= i欢迎下载精品学习资源temp = datai;datak = temp;datai = datak ;欢迎下载精品学习资源/* 以下为添加程序 */void insertSTUDENT *data, int *lenint no, pos;double subject1, subject2, subject3, subject4, subject5, mark_ave, mark_;tot int i;char nameMAX_NAME ;char fieldMAX_NAME;lab: printf"%sn", "Enter the new record, please input from the current menu - 1."; printf"%s", "Form :nno ";printf"%s", " Name field subject1 subject2 subject3 subject4 subject5n"; scanf"%d", &no;if no = -1 return ;data*len.no = no;scanf"%s %s %lf %lf%lf %lf%lf",name, field, &subject1, &subject2, &subject3, &subject4, &subject5;mark_ave=subject1+subject2+subject3+subject4+subject5/5.;0mark_tot=subject1+subject2+subject3+subject4+subject;5 pos = 0;while datapos.mark_tot < mark_tot && pos < *len pos +;for i = *len-1 ; i >= pos; i-datai+1 = datai ;datapos.no = no;strcpydatapos.name, name;strcpydatapos.field, field;datapos.subject1 = subject1; datapos.subject2 = subject2;欢迎下载精品学习资源datapos.subject3 = subject3; datapos.subject4 = subject4; datapos.subject5 = subject5; datapos.mark_ave = mark_ave; datapos.mark_tot = mark_tot;*len+ ;goto lab;/*以下为删除程序 */void delete_itemSTUDENT *data, int *lenint no, i, pos;lab: pos=0;printf"%sn", "The students need to delete the input of student id, please input from the current menu - 1.";scanf"%d", &no;if no = -1return;while datapos.no .= no && pos < *len pos = pos +1;if pos >= *len欢迎下载精品学习资源elseprintf"%sn", "Did not find the students need to delete";goto lab;for i = pos+1;i < *len ; i+欢迎下载精品学习资源datai-1 = datai ;*len = *len -1 ;欢迎下载精品学习资源if *len = 0printf"%sn", "No records, please press Enter to return."; getchar;getchar;return;欢迎下载精品学习资源goto lab;/* 以下为显示信息程序 */ void paintint i;欢迎下载精品学习资源system"cls";printf"n%49sn", "Score Manage Systemn";for i = 0 ; i < 80; i+putchar'=';putchar'n';printf"1 Input data2 Output datan"; printf"3 sort4 Insertn";printf"5 delete0 Quitn";for i = 0 ;i <= 79;i+putchar'=';putchar'n';printf"%sn", "Enter num from 1 to 5:" ;/* 以下为主程序 */void mainSTUDENT dataMAXN ;int len = 0;char a;paint;scanf"%c", &a;while a .= '0'switchacase '1': inputdata, &len;break;case '2': outputdata, len;break;case '3': sortdata, len; break;case '4': insertdata, &len;break;case '5': delete_itemdata, &len; break;default: if a .= 'n' printf"%sn", "Input Error.";break;if a .= 'n' paint ;scanf"%c", &a;五、 测试数据运行源程序,结果如下:欢迎下载精品学习资源欢迎下载精品学习资源六、 问题小结在设计过程中,遇到的问题有:欢迎下载精品学习资源1、如何排序,在排序方法的选择上显现问题,最终在查阅课本、相互比较之下得到明白决;2、所学的函数实现不了系统要求的功能,通过查阅书籍、询问同学得到明白决,如使用了 system"cls"来定义系统菜单等;七、 收成和体会通过此次课程设计,巩固了对for 循环、 switch 结构、函数调用、指针等已学过的重要学问点的把握;明白并学习了system"cls",goto 语句,把握了新学问;提高了分析解决问题的才能;八、参考资料:1) 谭浩强, C 程序设计教程,清华高校出版社, 2007 年2) 赵永哲,李雄飞,戴秀英编著, C 语言程序设计,科学出版社 ,2003 年3) 夏宽理,赵子正编著, C 语言程序设计,中国铁道出版社,2006 年物理与电子信息学院课程设计评定看法欢迎下载精品学习资源主要内容包括:设计报告内容的完整性和完成情形、报告格式的规范性、通过课程设计取得的收成等;指导老师评语成果:签名:年月日欢迎下载