1、C语言程序设计课程设计实验报告一、设计名称:学生成绩管理查询系统实验项目性质:综合性所涉及课程:C 语言程序设计计划学时:实验学时 12二、设计目的:1. 通过本课程设计,培养上机 动手能力,使学生巩固C 语言程序设计课程学习的内容,掌握工程软件设计的基本方法, 强化上机动手能力, 闯过编程关;2. 为后续各门计算机课程的学习打下坚实基础。3. 理解程序设计的思路,掌握结构化程序设计的方法,综合使用 C 语言进行程序编写,巩固常用的 C 语言概念,如数 组、指针、 结构体、链表、文件操作等,注意良好的程序设计风格的培养。提高编写程序解决实际问题的能力、调试程序的技能。三、设计环境(软件、硬件及
2、条件)1. 硬件:PC 机2. 软件:Turbo C+ 3.0四、设计说明:程序系统的结构:用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称、标识 符和它们之间 的层次结构关系。主程序:新建:输入记录(遇#号时停止输入)。插入:在指定位置插入记录。显示:列出所有记录。查询:1、按学号查询;2、按名字排序。删除:1、按学号删除;2、按名字删除;3、删除所有记录。排序:1、按语文成绩排序;2、按英语成绩排序;3、按数学成绩排序。保存:保存为任意名字,系 统自动加后缀名为.txt。读取:读取程序目录下的后缀名为.txt 的文件。退出:退出程序。五、各功能模块的具体实现,用 图表表
3、示。输入记录开始:输入学号输入的学号是否为#Y N结束,返回主菜单 输入记录循环输入结束显示按学号(姓名)查询信息按学号(姓名)删除信息Y Head=NULL N 输入要查询的学号(姓名)是否找到该学生Y N输出该学生成绩 输出该学生不存在是否重新查询Y N结束回到主界面 继续运行Y Head=NULL N与要删除的学号(姓名)比较输入要删除的学号(姓名)与要查询的学号(姓名)比较开始p=hp!=NULL输出学生信息;p=p-next结束读取文件保存文件六、各模块(函数)的功能介绍, 数据结构设计描述,参数说明等。STUDENT *init(); /*初始化链表*/STUDENT *creat
4、e(); /*新建 链表*/是否找到该学生删除返回输出不能找到该学生Y N回到主界面 继续运行能否找到文件开辟新单元 a1,a2;head=a1=a2=NULL;n=0;读文件 fp!feof(fp)n=n+1N=1head=a1 a2-next=a1a2=a1;开辟新单元 a1;读取 fp;a2-next=NULL返回找不到该文件YYNN输入文件名字(自动添加后缀名字.txt)head=a1=a2=NULL;n=0;输入文件名字(自动添加后缀名字.txt)保存完毕STUDENT *del_no(STUDENT *h);/*按学号删除信息 */STUDENT *del_name(STUDENT
5、 *h); /*按姓名删除信息*/void print(STUDENT *h); /*显示信息函数*/void search_no(STUDENT *h); /*按学号搜索*/void search_name(STUDENT *h); /*按姓名搜索*/STUDENT *insert(STUDENT *h); /*插入信息函数*/void sort(STUDENT *h);/* 排序函数*/void save(STUDENT *h);/*保存数据到文件*/void load(STUDENT *h); /*从文件读取数据*/int menu_main(); /*菜单函数*/void inputs
6、(char *prompt,char *s,int count);/*输 出信息*/七、程序代码:/#include /*引用库函数*/#include#include #include #define N 3 /*科目数*/#define MAX 100/*分数最大值*/#define NULL 0/*定义为空指针*/#define LEN sizeof(STUDENT)/*STUDENT所占内存大小 */typedef struct z1 char no11; /*学号*/char name15; /*姓名*/char sex5;int scoreN; /*分数*/float sum; /
7、*总分*/float average; /*平均分 */ struct z1 *next; STUDENT; /*以下为函数原型*/STUDENT *init(); /*初始化链表*/STUDENT *create(); /*新建 链表*/STUDENT *del_no(STUDENT *h);/*按学号删除信息 */STUDENT *del_name(STUDENT *h); /*按姓名删除信息*/void print(STUDENT *h); /*显示信息函数*/void search_no(STUDENT *h); /*按学号搜索*/void search_name(STUDENT *h
8、); /*按姓名搜索*/STUDENT *insert(STUDENT *h); /*插入信息函数*/void sort(STUDENT *h);/* 排序函数*/void save(STUDENT *h);/*保存数据到文件*/void load(STUDENT *h); /*从文件读取数据*/int menu_main(); /*菜单函数*/void inputs(char *prompt,char *s,int count);/*输 出信息*/main() /*主函数开始*/ int i; STUDENT *head; head=init();/*初始化链表*/clrscr(); /*清
9、屏*/ for(;)/*无限循环*/ switch(menu_main() /*调用主菜单函数,返回值整数作开关语句的条件*/ case 1:head=create();break; /*新建链表 */case 2:head=insert(head);break;/*插入学生信息 */ case 3:print(head);break; /*显示*/case 4:for(;)i=menu_search();if(i=1)search_no(head);/*按学号查找学生信息*/if(i=2)search_name(head);/*按姓名查找学生信息*/if(i!=1|i!=2)break;br
10、eak; case 5:for(;)i=menu_del();if(i=1)del_no(head);/*按学号删除学生信息*/if(i=2)del_name(head);/*按姓名 删除学生信息*/if(i=3)head=init();/*删除所有信息 */if(i!=1|i!=2|i!=3)break;break;case 6:sort(head);break;/*按学科对学生信息排序*/ case 7:save(head);break; /*保存*/case 8:load(head);break;/*读取*/case 9:exit(0); /*如返回值为9则程序结束 */ /*菜单函数,
11、函数返回值为整数,代表所选的菜单项*/ menu_main() char s3; int c; clrscr(); /*清屏*/ printf(“* Students Grade Management System *nn“); printf(“ 1. Enter recordsn“); printf(“ 2. Add recordsn“); printf(“ 3. List recordsn“); printf(“ 4. Search recordsn“);printf(“ 5. Delete recordsn“); printf(“ 6. Sort recordsn“); printf(“
12、 7. Save filesn“); printf(“ 8. Load filesn“); printf(“ 9. Quitnn“); printf(“*n“); do printf(“n Enter you choice(19):“); /*提示输入选项*/ scanf(“%s“,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c9); /*选择项不在19之间重输*/ return c; /*返回选择项,主程序根据该数调用相应的函数*/ /menu_search() char s3; int c; clrscr(); /*清屏*/ print
13、f(“* Students Grade Management System *nn“); printf(“ 1. Search records on numbern“); printf(“ 2. Search records on namen“); printf(“ 3. Backnn“); printf(“*n“); do printf(“n Enter you choice(13):“); /*提示输入选项*/ scanf(“%s“,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c3); return c; /*返回选择项,主程序根据该数
14、调用相应的函数*/ /menu_sort() char s3; int c; clrscr(); /*清屏*/ printf(“* Students Grade Management System *nn“); printf(“ 1. Chinesen“); printf(“ 2. Englishn“);printf(“ 3. Mathn“); printf(“ 4. Backnn“); printf(“*n“); do printf(“n Enter you choice(14):“); /*提示输入选项*/ scanf(“%s“,s); /*输入选择项*/ c=atoi(s); /*将输入
15、的字符串转化为整型数*/ while(c4); return c; /*返回选择项,主程序根据该数调用相应的函数*/ /menu_del() char s3; int c; clrscr(); /*清屏*/ printf(“* Students Grade Management System *nn“); printf(“ 1. Delete records on numbern“); printf(“ 2. Delete records on namen“);printf(“ 3. Delete all recordsn“); printf(“ 4. Backnn“); printf(“*n
16、“); do printf(“n Enter you choice(14):“); /*提示输入选项*/ scanf(“%s“,s); /*输入选择项*/ c=atoi(s); /*将输入的字符串转化为整型数*/ while(c4); return c; /*返回选择项,主程序根据该数调用相应的函数*/ /STUDENT *init() /*初始化链表*/ return NULL; /STUDENT *create() /*新建 链表函数*/ int i;int s; STUDENT *h=NULL,*info;clrscr(); /*清屏*/ for(;) info=(STUDENT *)m
17、alloc(sizeof(STUDENT); if(!info) printf(“nEMS memory is short!“); return NULL; inputs(“Number(Enter # to stop):“,info-no,11); /*调用“inputs“函数*/if(info-no0=#)clrscr();break; /*判断,当输入#时停止*/inputs(“Name:“,info-name,15); /*调用“inputs“函数*/inputs(“Sex:“,info-sex,4); s=0; for(i=0;iscorei); if(info-scoreiMAX|info-scoreiscoreiMAX|info-scoreiscorei; /*计算总分*/ printf(“-“);info-sum=s; info-average=(float)s/N;/*求平均数*/ info-next=h; h=info;