C语言学生信息管理完整_第1页
C语言学生信息管理完整_第2页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生信息管理系统本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。本程序中涉及结构体、单链表、文件等方面的知 识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单 链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚 实的基础。1、问题定义创建一个学生成绩管理系统。假设系统中每个学生记录只包括学生学号、学生姓名、 年龄、性别、出生年月、电话等信息。程序的运行效果如下图所示,选择任意菜单后,实现相应功能。在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设 计和系统

2、实现的任务。2、系统设计21总体设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任 务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构来分析其任务的划分,一般从上到下进行,最上面一层 是主模块,下面各层是其上一层模块的逐步细化描述。本成绩管理系统要求采用数组实现,它由如下六大功能模块组成: 输入学生记录。查询学生记录。删除学生记录。 显示所有学生记录。 统计学生人数。刷新当前信息。22详细设计2.2.1数据结构设计学生个人信息结构体结构体struct student将用于存储学生的基本信息,它将作为单链表的数据

3、域。struct record /*结构体*/char codeLEN+1。/*学号*/char nameLEN+1。/*姓名*/int age。/*年龄*/char sex3。/*性别*/char dateLEN+1。/*出生年月*/char telLEN+1。/*电话号码*/stuN。2.2.2输入记录模块void readfile()/*建立信息*/char *p=student.txt。FILE * i=0。if (fp=fopen(student.txt,r)=NULL)printf(Open file %s error! Strike any key to exit!,

4、p)。system(pause)。exit(0)。while(fscanf(fp,%s %s %d %s %s %s,stui.code,,&stui.age,stui.sex,stui.date,stui.tel)=8)i+。i=i。fclose(fp)。n=i。printf(录入完毕!n)。2.2.3查询记录模块void seek() /*查找*/int i,item,flag。char s121。/*以姓名和学号最长长度+1为准*/ printf(n)。printf( 1.按学号查询n)。printf( 2.退出本菜单n)。printf(n)。while(1)print

5、f(请选择子菜单编号:)。scanf(%d,&item)。flag=0。switch(item)case 1:printf(请输入要查询的学生的学号:n)。scanf(%s,s1)。for(i=0。in。i+) if(strcmp(stui.code,s1)=0)flag=1。printf(学生学号 学生姓名 年龄 性别 出生年月 电话n)。printf(n)。printf(%6s %7s %6d %5s %9s %10sn,stui.code,,stui.age,stui.sex,stui.date,stui.tel)。if(flag=0)printf(该学号不存在!n)。

6、break。case 2:return。default:printf(请在1-2之间选择n)。2.2.4删除记录模块void del()int i,j,flag=0。char s1LEN+1。printf(请输入要删除学生的学号:n)。scanf(%s,s1)。for(i=0。in。i+)if(strcmp(stui.code,s1)=0)flag=1。for(j=i。jn-1。j+)stuj=stuj+1。if(flag=0)printf(该学号不存在!n)。if(flag=1)printf(删除成功,显示结果请选择菜单6n)。n-。2.2.5显示所有学生记录模块void display()

7、int i。printf(所有学生的信息为:n)。printf(学生学号 学生姓名 年龄 性别 出生年月 电话n)。printf(- n)。for(i=0。in。i+)printf(%6s %7s %5d %5s %8s %10sn,stui.code,,stui.age,stui.sex,stui.date,stui.tel)。3、系统实现3.1.1程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作#include /*I/O函数*/ #include /*其它说明*/#include#include /*字符串函数*/#define BUFLEN 1

8、00 /*缓冲区最大字符数*/#define LEN 15 /*学号和姓名最大字符数,实际请更改*/#define N 100 /*最大学生人数,实际请更改*/3.1.2主函数main()mai n()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。FILE *fp。void seek()。/*函数声明*/void insert()。void del()。void display()。void save()。void getnum()。void readfile()。void menu()。int main()while(k)menu()。system(pause)。return

9、0。switch(num)case 1:insert()。break。case 2:del()。break。case 3:seek()。break。case 4:display()。break。case 5:getnum()。break。case 6:readfile()。break。case 7:k=0。break。default:printf(请在1-7之间选择n)。3.1.3主菜单界面用户进入成绩管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。此 代码被main()函数调用。void menu()/*界面*/int num。/printf(友情提醒:查询前请先刷新系统!n)。

10、scanf(%d,&num)。3.1.4插入学生记录在插入学生记录操作中,系统会先按学号查找到要插入的节点的位置,然后在该学号 之后插入一个新节点。void insert() /*插入函数*/int i=n,j,flag。printf(请输入待增加的学生数:n)。scanf(%d,&m)。doflag=1。while(flag)flag=0。printf(请输入第%d个学生的学号:n,i+1)。scanf(%s,stui.code)。for(j=0。ji。j+)if(strcmp(stui.code,stuj.code)=0)printf(已有该学号,请检查后重新录入!n)。flag=1。br

11、eak。/*如有重复立即退出该层循环,提高判断速度*/printf(*系统功能菜单*n)printf(*0951100206* *n)printf(*1.增加学生信息*n)。printf(*2.删除学生信息*n)。printf(*3.查询学生信息*n)。printf(*4.显示当前信息*n)。printf(*5.统计学生人数*n)。printf(*6.刷新当前信息*n)。printf(*7.退出系统*n)。printf(*printf(* *printf(请选择菜单编号:)。n)n)printf(请输入第%d个学生的姓名:n,i+1)。scanf(%s,)。printf(请输

12、入第%d个学生的年龄:n,i+1)。scanf(%d,&stui.age)。printf(”请输入第%d个学生的性别(格式:男1女0):n,i+1)。scanf(%s,stui.sex)。printf(”请输入第%d个学生的出生年月:(格式:年月)n,i+1)。scanf(%s,stui.date)。printf(请输入第%d个学生的电话:n,i+1)。scanf(%s,stui.tel)。if(flag=0)i=i。i+。while(in+m)。n+=m。printf(录入完毕!nn)。sort()。3.1.5统计学生记录在统计学生记录操作中,系统会统计学生人数总数,并打印输出统计结果。vo

13、id getnum()int num_b=0,num_g=0。int i。fp=fopen(student.txt,a+)。for(i=0。inum。i+)if(strcmp(stui.sex,1) num_g+。else num_b+。printf(【统计结果】n)。fprintf(fp,【统计结果】n)。printf(学生总人数为:10人n,num)。fprintf(fp,学生总人数为:10人n,num)。printf(”其中男生5人,女生5人n,num_b,num_g)。fprintf(fp,其中男生d人,女生d人n,num_b,num_g)。fclose(fp)。3.1.6排序学生记录

14、在排序学生记录操作中,系统会利用插入排序法实现单链表的按总分字段的降序排 序,并打印出排序前和排序后的结果。void sort()/*按学号排序*/int i,j,*p,*q,s。char temp10。for(i=0。ii。j-)if(strcmp(stuj-1.code,stuj.code)0)strcpy(temp,stuj-1.code)。strcpy(stuj-1.code,stuj.code)。strcpy(stuj.code,temp)。strcpy(temp,)。strcpy(,)。strcpy(,

15、temp)。strcpy(temp,stuj-1.sex)。strcpy(stuj-1.sex,stuj.sex)。strcpy(stuj.sex,temp)。strcpy(temp,stuj-1.date)。strcpy(stuj-1.date,stuj.date)。strcpy(stuj.date,temp)。strcpy(temp,stuj-1.tel)。strcpy(stuj-1.tel,stuj.tel)。strcpy(stuj.tel,temp)。p=&stuj-1.age。q=&stuj.age。s=*q。*q=*p。*p=s。32测试与调试3.2.1概述一般情况下, 为解决一个

16、问题所编写的程序代码较长, 可能包括几百条甚至成千上万 条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行 认真仔细的测试与调试。测试是通过运行程序发现错误的过程, 常见的错误有数据溢出、 数组越界、 进入死循 环、语句顺序颠倒、多加“;”或少加“”等等。调试则是确定测试中找到的错误性质 并改正错误的过程。测试与调试通常交替进行,即测试调试再测试再调试。能检查出尚未发现的、 各种不同类型错误的测试才是成功的测试。 测试程序需要测试 用例,测试用例可用如下公式表示:测试用例=测试数据+预期结果。好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率

17、要大。 要选择合适的测试数据, 使系统在运行时尽量能执行到每条语句,以测试各指令是 否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况,。对于合法数据, 还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、 中间某一位置的情况。测试程序时,用监视窗口可以随时查看变量或表达式的值,有时还可以将部分程序代码用注释符暂时括起来,缩短程序,以便压缩出错代码的范围。3.2.2程序测试在主菜单中选择1当用户输入1并按回车键后,即可进入数据输入界面。如下图所示: 请根据提示输入所需记录的内容。在主菜单中选择2当用户输入2并按回车键后,即可进入记录删除界面。在主菜单中选择3当用户输入3并按回车键后, 即可进入记录查找界面。 如图所示, 可按学号或姓名进 行查找。在主菜单中选择4在主菜单中选择5在主菜单中选择74、系统维护经测试与调试确认软件无错时, 开发就告一段落, 这时可以交付软件供用户使用, 但 是在软件的使用过程中还会面临更加漫长的工作,即软件维护。一般维护的工作有:更改 使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要 的改进等等。5、归纳总结51开发经验通过对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论