《C语言实战-学生信息管理系统》由会员分享,可在线阅读,更多相关《C语言实战-学生信息管理系统(34页珍藏版)》请在金锄头文库上搜索。
1、计算机实习报告面向过程编程用C语言求解实际问题附录中含代码,直接在的dev c+或者code block中即可运行班级: 学号: 姓名: 实习时间:一、开发任务22学生基本信息管理:根据自己初次入学时填写的学生信息基本情况登记表,为某学校学生管理部门日常管理学生基本信息,编程模拟实现一个信息管理系统。二、需求分析(一)学生信息管理系统的基本功能有:1读入或清空原本的学生基本信息。2新学生基本信息的录入。3按学号查找学生,进行该学生基本信息的修改。4按学号查找学生,删除该学生基本信息。5提供多种信息查询和显示:按学号查询某个学生的基本信息。按给定的班级号,查询该班全体学生的基本信息。按给定的年级
2、,查询该年级全体学生的基本信息。按所学专业,查询全体学生的基本信息。6提供多种信息统计和显示:按班级,统计高考课程各科最高、最低、平均入学成绩,以及每个人的总分。按入校时间,统计每个专业入学人数。按给定的班级号,统计该班生源所属省市的人数。按给定的年级,统计不同少数民族学生人数。按所学专业,统计不同年级男女生人数。找给定的年级,统计各个班级中家庭收人低于该班级全体同学家庭平均收人的学生人数。(二)学生信息管理系统的性能有:1用菜单方式提供对操作的选择。2输入均采用字符串的数据类型,提高程序的容错性。同时,在输入处设计了三种检验函数,当输入学号、班级、年级、成绩、日期等数字信息时,如果输入信息在
3、格式或范围上出现错误,程序会报错并提示重新输入。3删除操作会破坏有用信息,将提供多次确认,保证不因为误操作破坏有用信息。4添加学生信息时,程序会先遍历已有的学号,当输入重复学号时,程序会提示无法添加,保证每个学生都对应不同的学号。5修改学生信息时,程序会提示修改全部或部分信息,减少正确信息的重复录入。6在执行菜单前,程序会提示选择读入或清空文件中原有学生信息,便于对文件内容初始化。三、程序设计针对需求做如下设计:(一)数据结构设计假设学生基本信息管理系统中的信息结构如下: struct Stuchar xuehao10; /学号:8位数字 char name10; /姓名:最多4个汉字 cha
4、r zhuanye10; /专业:最多4个汉字 char banji10; /班级:4位数字 char nianji10; /年级:2位数字 char xingbie5; /性别:最多2个汉字 char shengyuandi20; /生源地:最多9个汉字 char minzu10; /民族:最多4个汉字 char yuwen5; /语文成绩:0-150之间的整数 char shuxue5; /数学成绩:0-150之间的整数 char yingyu5; /英语成绩:0-150之间的整数 char lizong5; /理综成绩:0-250之间的整数 char shouru5; /家庭收入(以万为
5、单位):0-999之间的整数 char ruxiao16; /入校时间(年):4位数字 char ruxiao24; /入校时间(月):1-12之间的整数 char ruxiao34; /入校时间(日):1-31之间的整数 stuN; P.S.为增强程序的容错性,学生基本信息的输入均采用字符串的数据类型(二)模块设计本任务的主要算法是一组对学生基本信息的操作函数,具体实现如下:1选择是否清空原有学生信息:根据提示,选择是否清空原有学生信息。若不清空,则读入学生基本信息;若清空,则重新录入学生信息。2添加学生基本信息:输入学生学号,查询文件中是否有该学号学生的信息。若有相同学号,则提示“已存在该
6、学号的学生,添加失败”;若没有相同学号,则输入新学生的基本信息并读入文件。3修改学生基本信息:输入学生学号,查询文件中是否有该学号学生的信息。若有相同学号,则根据提示选择修改该学生的全部或部分信息;若没有相同学号,则提示“该学生不存在!”。4查询并显示学生基本信息:输入学号,查询文件中是否有该学号学生的信息。若有相同学号,输出该学生的基本信息;若没有相同学号,则提示“该学生不存在!”。输入班级号,查询文件中是否有该班级学生的信息。若有相同班级号,输出该班全体学生的基本信息;若没有相同班级号,则提示“该班级不存在!”。输入年级,查询文件中是否有该年级学生的信息。若有相同年级,输出该年级全体学生的
7、基本信息;若没有相同年级,则提示“该年级不存在!”。输入专业,查询文件中是否有该专业学生的信息。若有相同专业,输出该专业全体学生的基本信息;若没有相同专业,则提示“该专业不存在!”。5统计并显示学生基本信息:输入班级,统计并输出该班级高考课程各科最高、最低、平均入学成绩,以及每个人的总分。输入入校时间,统计每个专业入学人数,输出符合条件的所有学生的基本信息。输入班级号,统计该班生源所属省市的人数,输出符合条件的所有学生的基本信息。输入年级,统计不同少数民族学生人数,输出符合条件的所有学生的基本信息。输入专业,统计不同年级男女生人数,输出符合条件的所有学生的基本信息。输入年级,统计各个班级中家庭
8、收人低于该班级全体同学家庭平均收入的学生人数,输出符合条件的所有学生的基本信息。(三)主程序结构本任务的主程序结构是一个菜单,根据选择转入相应的子程序中:1 录入一个新学生的基本信息;2 修改已有学生的基本信息;3 删除已有学生的基本信息;4 查询已有学生的基本信息;5 根据已有学生的基本信息,统计部分条件相同的学生人数;0 退出操作。P.S.为了便于更加直观地显示学生基本信息,程序中对查询操作划分四种情况:按学号查询某个学生的基本信息。按给定的班级号,查询该班全体学生的基本信息。按给定的年级,查询该年级全体学生的基本信息。按所学专业,查询该专业全体学生的基本信息。为了便于更加全面地显示学生基
9、本信息,程序中对统计操作划分六种情况:按班级,统计高考课程各科最高、最低、平均入学成绩,以及每个人的总分。按入校时间,统计每个专业入学人数。按给定的班级号,统计该班生源所属省市的人数。按给定的年级,统计不同少数民族学生人数。按所学专业,统计不同年级男女生人数。找给定的年级,统计各个班级中家庭收入低于该班级全体同学家庭平均收入的学生人数。为了便于更加简便地初始化文件内容,程序在菜单之前设计了读入或清空函数:可根据提示选择读入或清空文件中原有学生的基本信息。四、程序实现(一)读入或清空原有文件信息void read_or_clear(),流程图如下:(二) 添加一个新学生的信息void inser
10、tstu(),流程图如下:(三) 修改一个已有学生的信息void revisestu(),流程图如下:(四) 删除一个已有学生的信息void revisestu()思路与上述修改一个已有学生的信息基本相同,先遍历原有文件中的学生学号。如有相同学号,则删除该学生信息,反之系统提示“不存在该学生,无法删除!”。P.S. 为降低误删信息的概率,在第一次选择删除操作后,系统会再次提示“找到该学生,确认删除吗?”,此时可以重新确认是否删除该学生的信息。(五) 查询并显示学生信息void searchmenu(),伪代码实现如下:void searchmenu() /当输入“1”时,调用seaxuehao
11、()函数;/当输入“2”时,调用seabanji()函数;/当输入“3”时,调用seanianji()函数; /当输入“4”时,调用seazhuanye()函数; /其他情况,输出“输入符号错误,请重新输入:”;由于四种查询方式基本思路大体相同,即通过遍历原有文件中的学生信息,找到学号、班级、年级或专业信息符合条件的学生,并打印学生信息,故下面以学号查询void seaxuehao()为例,说明实现方式:void seaxuehao() /输入八位学号 for(i=1; i=n; i+) if(strcmp(stui.xuehao,xuehao)=0) /查询到相同学号(找到该学生) flag
12、=1; /打印该学生信息 if(flag=0) /输出“该学生不存在!” (六) 统计学生人数并显示学生信息void countmenu(),伪代码实现如下:void countmenu() /当输入“1”时,调用tjgrade()函数(统计各班成绩);/当输入“2”时,调用tjzhuanye()函数(统计各专业入学人数);/当输入“3”时,调用tjshengyuandi()函数(统计各生源地人数);/当输入“4”时,调用tjminzu()函数(统计各少数民族人数);/当输入“5”时,调用tjnannv()函数(统计各年级男女人数);/当输入“6”时,调用tjshouru()函数(统计各班家庭
13、收入低于平均水平人数); /其他情况,输出“输入符号错误,请重新输入:”;1统计各班成绩void tjgrade(),流程图如下:2统计各专业男女人数void tjnannv()由于实现四种统计方式各专业入学人数、某班生源所属省市人数、各年级少数民族人数以及各专业男女生人数的基本思路大体相同,即通过遍历原有文件中的学生信息,找到基本信息与输入信息相符的学生,统计学生人数并打印学生信息。故下面以按所学专业,统计不同年级男女生人数void tjnannv()为例,说明实现方式:void tjnannv() /输入要统计的专业及年级 for(i=1; i=n; i+) if(strcmp(stui.zhuanye,zhuanye)=0)&(strcmp(stui.nianji,nianji)=0)/遍历原文件中学生的专业及年级信息,当两条信息均与输入相符 if(strcmp(stui.xingbie,男)=0)|(strcmp(stui.xingbie,男生)=0) nansheng+; /当学生的性别信息为“男”或“男生”时,男生人数加一 else nvsheng+; /否则女生人数加一 /打