C语言高级编程课程设计报告
- 格式:doc
- 大小:1.08 MB
- 文档页数:26
目录一、实训目的 (1)二、题目要求 (1)三、总体设计 (1)四、详细设计 (3)五、调试与测试 (9)六、实训总结、心得体会 (13)七、参考资料 (14)一、实训目的:进一步加深、巩固我门所学专业课程的基本理论知识,理论联系实习,进一步培养学生综合分析问题和解决的能力。
掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。
进一步学习调试程序,掌握语法错误和逻辑的检查方法。
熟练掌握运用C语言独立的编写、调试应用程序和进行其他相关设计技能。
一、题目要求:学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。
系统要求实现以下功能:1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:按各门课程的成绩平均分进行排序,并显示。
4、信息删除与修改——输入学号,删除该学生的成绩信息。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位学生的信息写入文件中并能显示于屏幕上。
3、完成上述信息查询(学生学号、姓名等)、排序、信息删除与修改功能。
三、总体设计:根据上面的需求分析,可以将这个系统分为以下模块:录入模块、查询模块、删除模块、修改模块、排序模块、显示模块。
四、详细设计:1.主函数模块:主函数一般设计得比较简单,只提供录入,处理和输出部分的函数调用,中各功能模块用菜单方式选择。
流程图:NYint menu_select()/*选择菜单*/{char c;printf("\n\n");printf(" 1.学生信息录入 4.学生信息排序\n");printf(" 2.学生信息查询 5.学生信息统计\n");printf(" 3.学生信息删除与修改 6.学生信息显示\n");printf(" 0.退出系统\n");printf("\n\n");printf("请选择(0-6):");c=getchar();getchar();return (c-'0');}2. 信息录入模块:单独看各数据信息,学号,姓名是字符型,可以采用字符型数组,分数为整数,采用整数,数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理。
void addrecord(student stud[]){int i=0,j,num;char str[3];if(numstus!=0){printf("已有记录存在是否覆盖?(y/n)\n");gets(str);if(str[0]=='Y'||str[0]=='y')i=0;else i=numstus;}printf("请输入需要增加的学生信息个数:");scanf("%d",&num);if(i==0)numstus=num;else numstus+=num;if(numstus>lens){lens+=50;pointer=(student *)realloc(pointer,lens*LEN);}printf("请输入学生信息:\n");for(;i<numstus;i++){getchar();printf("请输入学号:");gets(pointer[i].number);printf("请输入姓名:");gets(pointer[i].name);printf("请输入性别(男/女1/0):");gets(pointer[i].sex);if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");else strcpy(pointer[i].sex,"男");printf("请输入各科成绩:(按“语文、数学、英语”的顺序):"); stud[i].score=0;for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]); /*计算总分*/stud[i].score+=stud[i].subject[j];}stud[i].average=stud[i].score/numsubs; /*计算平均分*/}count(stud); /*附名次*/display(stud,0,numstus-1);getchar();}int lens;student *pointer;void main(){int i=1;char str[2];lens=100;pointer=(student *)malloc(lens*LEN); /*分配内存*/numstus=0;welcome(); /*欢迎界面*/3.信息查询模块:该模块的功能是根据输入的学生的学号或姓名查找对应的记录,找到以后,显示相应的学生信息。
int findrecord(student stud[]) /*查询信息*/{char str[2];int i,num;if(numstus==0){printf("没有可被查询的记录\n");return -1;}else{printf("请选择查询方式:\n1.学号\t2.姓名\t\n");gets(str);if(str[0]=='1') /*按学号查找*/{printf("请输入学号:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0){display(stud,i,i);break;}else continue;}else if(str[0]=='2') /*按姓名查找*/{printf("请输入姓名:");for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].name)==0){display(stud,i,i);break;}else continue;}if(i>numstus){printf("没有查找所要的信息。
\n");return -1;}return i;}}4.信息删除模块:该模块的功能是:用户输入要删除的学生的学号或姓名根据学生学号或姓名查找记录并删除。
void deleterecord(student stu[],int i) /*删除信息*/{int j;for(j=i;j<numstus;j++)stu[j]=stu[j+1];numstus--;printf("删除成功!\n");}void count(student stud[]){int i,j;for(i=0;i<numstus;i++){stud[i].index=1;for(j=0;j<numstus;j++)if(stud[j].score>stud[i].score)stud[i].index++;}}5.信息修改模块:用户输入要修改学生的学号或姓名,根据学生的学号等信息查找学生记录,并提示用户修改该记录的哪部分信息。
根据用户选择修改相应的信息。
void amendrecord(student stud[]){char str[3]; /*供用户输入*/int i=-1,j;if(numstus==0) /*没有记录返回*/printf("没有可供修改的记录!");while(i<0){i=findrecord(stud);if(i>=0){printf("要删除这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){deleterecord(stud,i);count(stud);}else{printf("确定要修改这个学生的信息吗?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){printf("下面请重新输入学生的信息:\n");printf("请输入学号:");gets(stud[i].number);printf("请输入姓名:");gets(stud[i].name);printf("请输入性别(男/女1/0):");gets(str);if(str[0]=='0')strcpy(stud[i].sex,"女");elsestrcpy(stud[i].sex,"男");stud[i].score=0;printf("请按顺序输入成绩:");for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]);}getchar();stud[i].average=stud[i].score/numsubs;}count(stud);}display(stud,0,numstus-1);}6.排序模块:该模块的功能是按学号或名次(上升排序)并显示所有学生信息记录。
void sort(student stud[]){int i,j=0;char str[3];student *p;p=stud;if(numstus==0){printf("没有可供查询的记录!");}while(1){for(i=0;;i++){printf(" 请选择排序方式:");printf("(直接输入回车则结束查询操作)\n");printf("1.按照学号\t");printf("2.按照名次\n");gets(str);if(strlen(str)==0) break;if(str[0]=='1'){sortnum(p);display(stud,0,numstus-1);}else if(str[0]=='2'){sortcount(p);display(stud,0,numstus-1);}else printf("请输入1/2");printf("是否退出排序?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y') break;}return;}}五、调试与测试:1.主菜单模块:2.录入模块:3.查询模块:提供学号和姓名两种查询方式:4.删除模块:首选按学号或名字查询需删除学生的信息,再删除:5.修改模块:首选按学号或名字查询需修改学生的信息,再录入新的信息:6.再次录入模块:按需求选择是否再次录入学生信息:7.排序模块:有按学号和名次两种排序方式供选择:8.统计模块:统计各科目的最高分、最低分、平均分等信息:9.显示模块:显示统计后的信息:六、实训总结、心得体会:在科技高度发展的今天,计算机在人们之中的作用越来越突出。