C语言 课程设 计报告书_第1页
C语言 课程设 计报告书_第2页
C语言 课程设 计报告书_第3页
C语言 课程设 计报告书_第4页
C语言 课程设 计报告书_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、 实验题目 学生信息管理系统一、实验目的:(1)本课程设计为学生提供了一个既动手又动脑,自学,查资料,独立实践的机会。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。(2)C语言的实践。掌握C语言函数的定义方法,函数的声明及函数的调用过程。掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。二、实验内容:(1)运用结构体数组编辑一个简单的学生管理系统,使之能够完成学生信息的创建、添加,查询、修改,删除、统计、排序等操作,并对文件进

2、行保存和读取。(2)执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。(3)执行运行操作,逐一对每个模块进行调试。直到全部程序运行成功为止。(4)请老师检查,向老师演练此程序,并能回答老师提出的相关问题。 三、 需求分析:(1)根据学生信息管理的需要,建立一个“学生信息管理系统”, 系统具有输入、输出、查询、修改、删除、统计、排序等基本功能;以方便对信息的管理操作。每一条记录包括一个学生的学号、姓名、成绩、性别,年龄,出生年月日,家庭住址系统的各个功能模块都用函数的形式来实现;可以将学生成绩信息保存在文件中,并从文件中读取出来。有一个清晰美观界面来调用各个功能。本程序

3、是由C语言的基本单位函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。本程序分为7个模块,分别为创建学生资料;添加学生的资料; 查询学生的成绩;修改学生的资料;删除学生的资料;统计学生的成绩;对学生的资料进行排序。本程序可以处理多个学生的成绩的输入、添加、修改、排序等问题。本程序的使用特别方便,每做完一个模块,下面都有提示信息。使用环境为Tc。(2)创建该学生成绩管理系统目的就是能够对学生基本信息进行创建、追加、查询、修改、删除、统计、排序等功能,这样可以简化许多人工做起来很复杂的问题。譬如:“排序”,有了此程序只需将信息输入,计算机就可自动执行,省时、省力。另外,它还可以重复使用,

4、方便、快捷。(3)该学生基本信息管理系统是在WIN-TC中文简体环境下运行。该系统要测试的数据如下:输入模块:(输入5个学生的信息)序号姓名学号成绩年龄性别家庭住址出生年月日MaryA10019818femaleshandong1988-5-6LindaA10028618fameladalian1988-12-23TomA10249519malenanshang1988-9-8JimA10258019malebeishang1988-5-23SusanA10477818femalexishan1988-8-9添加模块:(再加1个信息)06KingA10485619malenanjing1989

5、-9-23查询模块:(查询Jim的基本信息) A1024(按学号即可查询)或Jim(按姓名也可查询)修改模块:(修改Linda的信息)(输入)1(修改名字)(输入)(修改学号)(输入)(修改成绩)(输入)(修改性别)(输入)(修改年龄)(输入)(修改家庭住址)(输入)(修改出生年月日)删除模块:(删除King的基本信息)学号即可删除)统计模块:可统计男女人数,统计各分数段人数。排序模块:按成绩,学号,分别进行排序。 四、概要设计(1) 主函数结构图: 主 函 数 输 入 模 块 输 出 模 块 更 新 模 块 查 询 模 块 排 序 模 块 统 计 模 块 退 出 模 块(2)模块功能详细说明

6、:A、输入模块:此模块可以连续输入30个学生的资料,若学生数少于30,则可以在输入序号处输入0便可退出此模块,并把输入的信息保存到c:students文件中。 B、输出模块:此模块中先打开c:students文件中的学生信息,后输出要学生信息更新模块:此模块包括添加,修改,删除模块修改模块:此模块中可以修改学生的任何一个信息。修改完毕后输入可以继续修改,输入则退出此模块。删除模块:此模块中用到的删除原理为覆盖要删除的学生的资料。过程简述,先输入要删除的学生的学号,系统找到此学生的信息后给它复制下一个学生的信息,给下一个学生的纪录复制下下一个学生的信息,一直到最后一个学生的信息复制给倒数第二个学

7、生的信息为止。然后文件中的学生总数减一含了三个小模块添加模块:此模块中先打开c:students统计文件中的学生,后输入要添加的学生的学号,系统确认此学号在c:students不存在时开始纪录新学生的资料,便清楚使用者。D. 查询模块:此模块中使用者可以用三种方式查询学生成绩。分别为(1)按学号查询(2)按姓名查询。在这里以按学号查询为列:先选择按学号查询,输入要查询的学生的学号,系统确认此学号在c:stud存在后读取信息并在屏幕上输出学生纪录。F、排序模块:此模块用的为指针。在此模块中可以按两种方法进行排序 ,分别为(1)按成绩排序(2)按学号排序(3)按序号排序输出时分别以从大到小和从小到

8、大从小到大的循序进行输出。G、此模块较简单,统计文件c:students中的男和女的学生个数和各成绩段的人数。五、详细设计及运行结果(1)各个模块的程序流程图添加模块:. 从c:students文件中读取学生个数sum,i=sum,flag=0studi.num=+sum输入学生信息choice=y|choice=Y?i+;flag=1flag=0结束删 除 模 块:打开c:students统计文件中的个数sum中学生个数counti0输入删除的学号isum i+srcmp(studi.number,delete_number)=0?该学生是不存在的isum?i+studi=studi+1;s

9、um=sum-1该学生已经被删除了结束排序模块:打开c:students文件 统计文件中学生个数sumstruct stud *p,*qMAXp=studi=0isumi+qi=p+isum?i+k=ij=k+1jnumber,qj-number)0?k=jk!=ip=qi;qi=qk;qk=p输出结果结束打开c:students文件 统计文件中学生个数sumstruct stud *p,*qMAXp=studi=0isumi+qi=p+isum?i+k=ij=k+1jscorescore?k=jk!=ip=qi;qi=qk;qk=p输出结果结束打开c:students文件 统计文件中学生个数

10、sumstruct stud *p,*qMAXp=studi=0isumi+qi=p+isum?i+k=ij=k+1jnumqj-num?k=jk!=ip=qi;qi=qk;qk=p输出结果结束( 2 ) 函数之间相互调用的图示:主函数调 用 输入函 数调 用 输出函 数调 用 更新函 数调 用 查 询 函 数调 用 排 序函 数调 用 统 计 函 数 结束结束结束结束结束结束调 用 退 出函 数结束(3)主要函数之间相互调用如下: 主函数的调用:main() int choice; sum=read_message(); bioskey(0); printf(press any key to

11、 continue:n); getch(); do system(cls); printf(nnn * student manage system *nn); printf( 1.input messagenn); printf( 2.output messagenn); printf( 3.renew messagenn); printf( 4.inquire messagenn); printf( 5.sort messagenn); printf( 6.count messagenn); printf( 0.exit the systemnn); printf( please selec

12、t the choice); scanf(%d,&choice); switch(choice) case 1: input_message();break; case 2: output_message();break; case 3: renew_message();break; case 4: inquire_message();break; case 5: sort_message();break; case 6: count_message();break; case 0: break; while(choice!=0); save_message(sum); printf(n- m

13、essage has saved!-(file name:students.txt) n); 删除函数的调用delete_message() char delete_number10; int i; system(cls); printf( please input the number you want to delete:); scanf(%s,delete_number); for(i=0;isum;i+) if(strcmp(studi.number,delete_number)=0) for(;isum;i+) studi=studi+1; sum=sum-1; printf( th

14、e message has been deleted!); else printf(the student is not exist!); 添加函数的调用 insert_message() int i=sum,j,flag=0; char choice; system(cls); printf(nn add a new studentn); printf( -n); do studi.num=+sum; printf(n the new students num:%d,studi.num); printf(n the new students name :); scanf(%s,studi.n

15、ame); printf(n the new students number:); scanf(%s,studi.number); printf(n the new students score:); scanf(%d,&studi.score); printf(n the new students age:); scanf(%d,&studi.age); printf(n the new students sex:); scanf(%s,studi.sex); printf(n the new students address:); scanf(%s,studi.address); prin

16、tf(n the new students birthday:); scanf(%d %d %d, &studi.birthday.year,&studi.birthday.month,&studi.birthday.day); printf(n Do you want to continue? (Y/N); choice=getch(); if (choice=y|choice=Y) printf(n continue!n); i+; flag=1; else flag=0; while(flag=1); printf(n press any key to menu!); bioskey(0

17、); 六、调试情况,设计技巧及体会( 1 )、调试中的问题:a. 刚开始没有那个初始化函数,程序运行后没有输入任何数据就试得去执行显示功能,结果output_message显示的是一些乱码!加入初始化函数后,这种现象也随之消失。b. 在输入函数中设了最大值,可以输入30个学生的成绩信息,当输入数字时停止,并保存信息。c. 在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能 。d. 有时候,忘记定义就直接调用,使得出错。e. 定义的成绩是浮点型的,但输入数据的时候却忘记输成整型,导致输入和输出均错误。最后,将定义的成绩改为整型才正确。我这时候才真正体会到了一致性的重要。检查程序

18、很多遍但却始终不知道输入的数据有错,很令人头疼。( 2 )对自己程序的总结与评价: 本程序是由C语言的基本单位函数来设计实现与其功能的多次使用函数调用以及函数的嵌套调用。本程序分为7个模块,分别为(1)输入学生资料。(2)输出学生的资料(3)更新学生的成绩(4)查询学生的资料(5)排序学生的资料(6)统计学生的成绩(7)退出信息管理系统。本程序可以处理多个学生的信息的输入、添加、修改、排序等问题。本程序的使用特别方便,每做完一个模块,下面都有提示信息。使用环境为Tc。此程序的不足之处在学生基本信息方面还不够完善, 另一方面就是在运行此程序时,需要执行操作的提示语不够具体和完善.改进方法: 可以

19、在学生基本信息的结构体中添加更多的学生信息,像是多输入几门课的成绩,删除的时候,应多加一个按照序号删除,查询时也应加入一个按照序号查询,使得学生信息更加完善,应用的时候更加的方便,快捷。此外,还可以在编程时加一些必要的提示语,用printf(“”); 语句直接可输入.(3)、在设计过程中的感受:首先经过两周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验。其次

20、, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!再则, 因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老师发挥的重要作用,C语言程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。(4)

21、测试数据:输入模块:序号:01姓名:mary学号:a1005成绩:89年龄:19性别:女家庭住址fangdong:出生年月日:1988-9-16序号:02姓名:jim学号:a1021成绩:76年龄:18性别:男家庭住址linhe:出生年月日:1989-6-12序号:03姓名:ham学号:a1012成绩:68年龄:18性别:男家庭住址kongtou:出生年月日:1989-1-23输出模块:序号姓名学号成绩年龄性别家庭住址出生年月日01marya10058919女fangdong1988-9-1602jima10217618男Linhe1989-6-1203hama10126818男kongtou

22、1989-1-23添加模块:序号:04姓名:susan学号:a1025成绩:78年龄:18性别:女家庭住址kongtou:出生年月日:1989-6-30 输出:序号姓名学号成绩年龄性别家庭住址出生年月日01marya10058919女fangdong1988-9-1602jima10217618男Linhe1989-6-1203hama10126818男kongtou1989-1-2304susana10257818女kongtou1989-6-30删除模块:输入要删除的学号:a1025 输出:序号姓名学号成绩年龄性别家庭住址出生年月日01Marya10058919女fangdong1988-

23、9-1602Jima10217618男Linhe1989-6-1203Hama10126818男kongtou1989-1-23修改模块:输入要修改的学号:a1021你想修改哪一项?1姓名2学号3成绩4年龄5性别6家庭住址7出生年月日:请选择(17)3成绩:98序号姓名学号成绩年龄性别家庭住址出生年月日02Jima10219818男linhe1989-6-12查询模块:按学号查询:输入你要查询的学号:a1021序号姓名学号成绩年龄性别家庭住址出生年月日02Jima10219818男linhe1989-6-12按姓名查询:输入你要查找的姓名:jim序号姓名学号成绩年龄性别家庭住址出生年月日02J

24、ima10219818男linhe1989-6-12统计模块:1统计男女人数:男的:2女的:2统计成功!按任意键返回!2统计各分数段人数:90分以上:080分以上:170分以上:260分以上:360分以下:无统计成功!按任意键返回!排序模块:1按学号:序号姓名学号成绩年龄性别家庭住址出生年月日01Marya10058919女fangdong1988-9-1603Hama10126818男kongtou1989-1-2302jima10217618男linhe1989-6-122按成绩:序号姓名学号成绩年龄性别家庭住址出生年月日01Marya10058919女fangdong1988-9-160

25、2Jima10217618男Linhe1989-6-1203Hama10126818男kongtou1989-1-233按序号:序号姓名学号成绩年龄性别家庭住址出生年月日01Marya10058919女fangdong1988-9-1602Jima10217618男Linhe1989-6-1203Hama10126818男kongtou1989-1-23程序运行:主函数输入模块:输出模块:更新模块:)插入模块:)删除模块)修改模块:查询模块:)按学号查询:)按姓名查询:排序模块:)按学号排序:)按成绩排序:)按序号排序:统计模块:)统计男女:)统计成绩:退出模块七、源程序清单: #includ

26、e #include #define MAX 30 #define PAGE 5 #define PRINT1 printf(-n) #define PRINT2 printf(num-name-number-score-age-sex-address-birthday(year-month-day)n) #define PRINT3 printf(%d,%s,%s,%d,%d,%s,%s,%d-%d-%dn,studi.num,,studi.number,studi.score,studi.age,studi.sex,studi.address,studi.birthda

27、y.year,studi.birthday.month,studi.birthday.day) int sum; struct DATE int year; int month; int day; ; struct stud int num; char name21; char number10; int score; int age; char sex11; char address27; struct DATE birthday; studMAX; save_message(int sum) FILE *fp; int i; if(fp=fopen(students.txt,wb)=NUL

28、L) printf( read file wrong!n); return; for(i=0;isum;i+) if(fwrite(&studi,sizeof(struct stud),1,fp)!=1) printf(write file wrong!n); fclose(fp); input_message() int i=0,s=MAX; system(cls); printf(nn enter the students messages (not more than %d)n,s); printf( -n); do printf(n the %dth student ,i+1); pr

29、intf(n students num:); scanf(%d,&studi.num); if(studi.num=0) break; printf(n students name:); scanf(%s,); printf(n students number:); scanf(%s,studi.number); printf(n students score:); scanf(%d,&studi.score); printf(n students age:); scanf(%d,&studi.age); printf(n students sex:); scanf(%s,

30、studi.sex); printf(n students address:); scanf(%s,studi.address); printf(n students birthday:); scanf(%d-%d-%d,&studi.birthday.year,&studi.birthday.month,&studi.birthday.day); i+; while(iMAX); printf(n -%d students message have been input!-n,i); sum=i; printf(n press any key return to menu!); bioske

31、y(0); int read_message() FILE *fp; int i=0; if(fp=fopen(students.txt,rb)=NULL) printf(nn*there is no message,press any key to menu and input message!*n); return; while(feof(fp)!=1) fread(&studi,sizeof(struct stud),1,fp); if(studi.num=0) break; else i+; fclose(fp); return ; output_message() int i=0,j

32、=0,page=1; system(cls); printf(nn -student message list- the %dth pagenn,page); PRINT2; PRINT1; do if(studi.num!=0) j+; if(j%PAGE!=0) PRINT3; PRINT1; else PRINT3; PRINT1; if(studi+1.num!=0) printf(press any key to continue!); bioskey(0); system(cls); printf(nn -students message list- the %dth pagesn

33、n,+page); PRINT2; PRINT1; i+; while(studi.num!=0); printf(press any key to menu!); bioskey(0); insert_message() int i=sum,j,flag=0; char choice; system(cls); printf(nn add a new studentn); printf( -n); do studi.num=+sum; printf(n the new students num:%d,studi.num); printf(n the new students name :);

34、 scanf(%s,); printf(n the new students number:); scanf(%s,studi.number); printf(n the new students score:); scanf(%d,&studi.score); printf(n the new students age:); scanf(%d,&studi.age); printf(n the new students sex:); scanf(%s,studi.sex); printf(n the new students address:); scanf(%s,stu

35、di.address); printf(n the new students birthday:); scanf(%d %d %d, &studi.birthday.year,&studi.birthday.month,&studi.birthday.day); printf(n Do you want to continue? (Y/N); choice=getch(); if (choice=y|choice=Y) printf(n continue!n); i+; flag=1; else flag=0; while(flag=1); printf(n press any key to

36、menu!); bioskey(0); delete_message() char delete_number10; int i; system(cls); printf( please input the number you want to delete:); scanf(%s,delete_number); for(i=0;isum;i+) if(strcmp(studi.number,delete_number)=0) for(;isum;i+) studi=studi+1; sum=sum-1; printf( the message has been deleted!); else

37、 printf(the student is not exist!); revise_message() int i=0; int choice,flag; char revise_number10; do system(cls); printf(n input the students number you want to revise:); scanf(%s,revise_number); for(i=0;isum;i+) if(strcmp(studi.number,revise_number)=0) printf(n -students message-n);PRINT1;PRINT2

38、;PRINT3;printf(n which one do you want to revise?n);printf(n 1.namen);printf(n 2.numbern);printf(n 3.scoren);printf(n 4.sexn);printf(n 5.agen);printf(n 6.addressn);printf(n 7.birthdayn);printf(n please select your choice:);scanf(%d,&choice);switch(choice) case 1:printf(n revised name:); scanf(%s,stu

39、);break; case 2:printf(n revised number:); scanf(%s,studi.number);break; case 3:printf(n revised score:); scanf(%d,&studi.score);break;case 4:printf(n revised age:); scanf(%d,&studi.age);break;case 5:printf(n revised sex:); scanf(%s,studi.sex);break;case 6:printf(n revised address:); scanf(%s

40、,studi.address);break;case 7:printf(n revised birthday:); scanf(%d %d %d,&studi.birthday.year,&studi.birthday.month,&studi.birthday.day); PRINT1; PRINT2; PRINT3; break; if(i =sum) printf(n the student is not exist!); bioskey(0); printf(nn Do you want to continue to revise? (Y/N); choice=getch(); if(choice=Y|choice=y) flag=1; printf(n continue!n); else flag=0; while(flag=1); printf(n press any key return to menu

温馨提示

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

最新文档

评论

0/150

提交评论