《C程序设计》课程设计报告完成_第1页
《C程序设计》课程设计报告完成_第2页
《C程序设计》课程设计报告完成_第3页
《C程序设计》课程设计报告完成_第4页
《C程序设计》课程设计报告完成_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计报告题目学生信息管理系统系别数学与计算机科学系班级10数学与应用数学姓名彭伟学号10061310张兵1006131054张祥建1006131059张志波1006131063刘越10061310指导教师束红职称讲师二一 一年 六 月 C语言课程设计报告 第 30 页,共 26页一课程设计目的1. 训练学生灵活应用所学知识,独立完成问题分析,结合C程序设计理论知识,编写程序求解指定问题。 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4. 训练用系统的观点和软件开发一般规范进行软件开发,巩固

2、、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。二课程设计任务与要求:任务学生信息管理 问题描述:已知某学生信息表中现有N位同学的信息(要求各人数据不同),如:学号姓名年龄性别出生年月地址电话E-mail001彭伟20男92.09安徽187676543211192866112002张兵21男91.07安徽187678543541192866121 现需要删除已转学的某位同学的信息,同时添加某位同学的信息(学号、姓名),插入位置按学号升序排列。 请根据所学过的知识用C/C+编程实现此操作。程序要求: 1. 现有N位同学的数据要求从数据文件中读入,不用交互方

3、式录入;2. 删除及插入操作完毕,需将信息表中的所有记录按学号升序方式显示出来;3. 将更新后的信息表保存到另一个数据文件中;4. 可以增加功能:如修改某位同学的信息。要求:1. 在处理每个题目时,要求从分析题目的需求入手,设计算法、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2. 设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3. 程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4. 每组同学需提交可独立运行的程

4、序;5. 每组同学需独立提交设计报告书(每组一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6. 课程设计实践作为培养学生动手能力的一种手段,单独考核。三课程设计说明书1、需求分析要求用到课本上学到的知识,所以就要充分而清晰的理解关于数组、指针、结构体等知识。要求实现的基本功能很简单,只有删除和插入,增加功能也不过是加上修改。问题是将输入的信息保存入文件和从文件输出。这里基本是自学的内容,而且要考虑到是否要自行选择保存的磁盘。综上,做这个课题,要具备的知识就是数组、指针、结构体等基本知识,文件的保存和读取算法,以及丰富的程序调适经验。2、概要设计 首先由于程序中要有对学生信

5、息的增加和减少,定义三个全局变量k,n,m,在此程序的任意的模块中均可以使用。宏定义,用LEN来代替开辟地址空间,定义八个结构体变量,学号code,姓名name,年龄age,出生年月time,家庭住址add,电话号码tel,电子邮件地址mail. 设计实现主要功能的函数有:创建学生信息的子函数void readfile();查找的子函数void seek();修改的子函数void modify();排序的子函数void sort();增添信息的子函数void insert();删除信息的子函数void del();显示当前信息的子函数void display();保存信息的子函数del();然

6、后在main()函数中使用一个menu()实现对各个子函数的调用。为了使用的方便,程序中将设计一种排序的方式,按照学号排序void sort()为了直观的看到操作以后的结果,还要有一个输出显示的函数void display()。程序运行中,为了保持屏幕的清楚和美观,时刻进行清屏也是必要的。3、详细设计1)宏定义,定义全局变量、结构体:#include<stdio.h> /*I/O函数*/#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#define BUFLEN 100 /* 缓冲区最大字符数 *

7、/#define LEN 15 /* 学号和姓名最大字符数,实际请更改 */#define N 100 /* 最大学生人数,实际请更改*/struct record /*结构体*/char codeLEN+1; /* 学号 */char nameLEN+1; /* 姓名 */int age; /* 年龄 */char sex3; /* 性别 */char timeLEN+1; /* 出生年月 */char add30; /* 家庭地址 */char telLEN+1; /* 电话号码 */char mail30; /* 电子邮件地址 */stuN;int k=1,n,m; /* 定义全局变量

8、*/ void readfile();/* 函数声明 */void seek();void modify();void insert();void del();void display();void save();void menu();2)主函数的算法如下:main() while(k)menu();system("pause");return 0; /*结束main函数*/ 3)建立信息的算法如下:void readfile()/* 建立信息 */char *p="student.txt"FILE *fp;int i=0;if (fp=fopen(&

9、quot;student.txt","r")=NULL) printf("Open file %s error! Strike any key to exit!",p);system("pause");exit(0);while(fscanf(fp,"%s %s%d%s %s %s %s %s",stui.code,,&stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;

10、printf("录入完毕!n");4)查找学生信息的算法如下:void seek() /*查找*/int i,item,flag;char s121; /* 以姓名和学号最长长度+1为准 */printf("-n");printf("-1.按学号查询-n");printf("-2.按姓名查询-n");printf("-3.退出本菜单-n");printf("-n");while(1)printf("请选择子菜单编号:");scanf("%d&qu

11、ot;,&item);flag=0;switch(item)case 1:printf("请输入要查询的学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0)flag=1;printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");printf("-n");printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn",stui.code,st

12、,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("该学号不存在!n"); break;case 2:printf("请输入要查询的学生的姓名:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(,s1)=0)flag=1;printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");printf("-n&

13、quot;);printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("该姓名不存在!n"); break;case 3:return;default:printf("请在1-3之间选择n");5)修改学生信息的算法如下:void modify() /*修改信息*/int i,item,num;char sex

14、13,s1LEN+1,s2LEN+1; /* 以姓名和学号最长长度+1为准 */printf("请输入要要修改的学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) /*比较字符串是否相等*/num=i;printf("-n");printf("1.修改姓名n");printf("2.修改年龄n");printf("3.修改性别n");printf("4.修改出生年月n"

15、);printf("5.修改地址n");printf("6.修改电话号码n");printf("7.修改E-mail地址n");printf("8.退出本菜单n");printf("-n");while(1)printf("请选择子菜单编号:");scanf("%d",&item);switch(item)case 1:printf("请输入新的姓名:n");scanf("%s",s2);strcpy(stu

16、,s2); break;case 2:printf("请输入新的年龄:n");scanf("%d",&stunum.age);break;case 3:printf("请输入新的性别:n");scanf("%s",sex1);strcpy(stunum.sex,sex1); break;case 4:printf("请输入新的出生年月:n");scanf("%s",s2);strcpy(stunum.time,s2); break;case 5:pri

17、ntf("请输入新的地址:n");scanf("%s",s2);strcpy(stunum.add,s2); break;case 6:printf("请输入新的电话号码:n");scanf("%s",s2);strcpy(stunum.tel,s2); break;case 7:printf("请输入新的E-mail地址:n");scanf("%s",s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf

18、("请在1-8之间选择n");6)排序的算法如下:void sort()/*按学号排序*/int i,j,*p,*q,s; char temp10;for(i=0;i<n-1;i+)for(j=n-1;j>i;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(,);strcp

19、y(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(stuj.time,temp);strcpy(temp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strc

20、py(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mail,temp); p=&stuj-1.age; q=&stuj.age; s=*q; *q=*p; *p=s;7)增添学生信息的算法如下:void insert() /*插入函数*/ int i=n,j,flag;printf("请输入待增加的学生数:n");scanf("%d",&m);do flag=1;while(flag)flag=0;printf(

21、"请输入第 %d 个学生的学号:n",i+1);scanf("%s",stui.code);for(j=0;j<i;j+)if(strcmp(stui.code,stuj.code)=0)printf("已有该学号,请检查后重新录入!n");flag=1;break; /*如有重复立即退出该层循环,提高判断速度*/printf("请输入第 %d 个学生的姓名:n",i+1);scanf("%s",);printf("请输入第 %d 个学生的年龄:n",

22、i+1);scanf("%d",&stui.age);printf("请输入第 %d 个学生的性别:n",i+1);scanf("%s",stui.sex);printf("请输入第 %d 个学生的出生年月:(格式:年.月)n",i+1);scanf("%s",stui.time);printf("请输入第 %d 个学生的地址:n",i+1);scanf("%s",stui.add);printf("请输入第 %d 个学生的电话:n&qu

23、ot;,i+1);scanf("%s",stui.tel);printf("请输入第 %d 个学生的E-mail:n",i+1);scanf("%s",stui.mail);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("录入完毕!nn");sort(); 8)删除信息的算法如下:void del()int i,j,flag=0;char s1LEN+1;printf("请输入要删除学生的学号:n");scanf("%s",s1)

24、;for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) flag=1;for(j=i;j<n-1;j+)stuj=stuj+1;if(flag=0)printf("该学号不存在!n");if(flag=1)printf("删除成功,显示结果请选择菜单6n");n-; 9)显示当前信息的算法如下:void display() int i;printf("所有学生的信息为:n");printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");prin

25、tf("-n");for(i=0;i<n;i+) printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);10)保存当前学生信息的算法:void save()int i;FILE *fp;fp=fopen("student.txt","w"); /*写入*/for(i=0;i<n;i+)fprintf(fp,&q

26、uot;%s %s %d %s %s %s %s %sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);fclose(fp);11)各个模块之间调用关系如下:主函数建立信息查找信息写入文件读取文件修改信息删除信息插入信息按姓名查找按学号查找输出显示信息按学号排序按学号排序按学号排序4、设计与调试分析从上面的算法和调用关系可以看出,这个程序的基本样子已经非常的清楚,但是真正的程序中还要考虑各种限制条件。例如在查找的过程中,可能不存在要查找的信息,就要给出不存在此信息的提示等。还

27、有就是涉及到返回值得问题和程序中所要用到的变量的问题。在调试的过程中所遇到的问题很多,其中最难的两个问题是给出的六个警告错误,在5.0的版本下就是两个使得程序无法运行的错误。其中五个是因为在变量的声明中因为使用了浮点型和双精度型两种而造成在某些模块中两个变量相互赋值时类型不匹配。另一个是在查找的子函数中忘记了需要的返回语句,return 1.5、用户手册1)本程序可以在vc+5.0和vc+6.0 的环境下运行。2)在vc中创建一个工程,将源程序复制到.cpp中,编译链接就可以。3)选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。界面如下:4)创建信息就是把最开始要输入的

28、信息输入到系统里。5)浏览信息就是按照要求的顺序浏览已经输入的信息。6)保存信息就是把输入的信息保存如指定的磁盘。7)打开文件就是把保存的信息从磁盘读取保存的信息。8)插入,修改,删除分别是对指定的某信息进行相应的操作。6、测试成果查询时,当输入学号不存在时系统提示学号不存在。删除信息时学号不存在时提示。删除前。001号学生被删除。7、附录(源程序清单)#include<stdio.h> /*I/O函数*/#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#define BUFLEN 100 /*

29、缓冲区最大字符数 */#define LEN 15 /* 学号和姓名最大字符数,实际请更改 */#define N 100 /* 最大学生人数,实际请更改*/struct record /*结构体*/char codeLEN+1; /* 学号 */char nameLEN+1; /* 姓名 */int age; /* 年龄 */char sex3; /* 性别 */char timeLEN+1; /* 出生年月 */char add30; /* 家庭地址 */char telLEN+1; /* 电话号码 */char mail30; /* 电子邮件地址 */stuN;int k=1,n,m;

30、/* 定义全局变量 */ void readfile();/* 函数声明 */void seek();void modify();void insert();void del();void display();void save();void menu(); int main() while(k)menu();system("pause");return 0; void help() printf("n0.欢迎使用系统帮助!n");printf("n1.进入系统后,先刷新学生信息,再查询;n");printf("n2.按照菜

31、单提示键入数字代号;n");printf("n3.增加学生信息后,切记保存按7;n");printf("n4.谢谢您的使用!n"); void readfile()/* 建立信息 */char *p="student.txt"FILE *fp;int i=0;if (fp=fopen("student.txt","r")=NULL) printf("Open file %s error! Strike any key to exit!",p);system(&quo

32、t;pause");exit(0);while(fscanf(fp,"%s %s%d%s %s %s %s %s",stui.code,,&stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;printf("录入完毕!n"); void seek() /*查找*/int i,item,flag;char s121; /* 以姓名和学号最长长度+1为准 */printf("-n");print

33、f("-1.按学号查询-n");printf("-2.按姓名查询-n");printf("-3.退出本菜单-n");printf("-n");while(1)printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item)case 1:printf("请输入要查询的学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.

34、code,s1)=0)flag=1;printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");printf("-n");printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf("该学号不存在!n"); break;case 2:printf("请输入

35、要查询的学生的姓名:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(,s1)=0)flag=1;printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");printf("-n");printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn",stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stu

36、i.mail);if(flag=0)printf("该姓名不存在!n"); break;case 3:return;default:printf("请在1-3之间选择n"); void modify() /*修改信息*/int i,item,num;char sex13,s1LEN+1,s2LEN+1; /* 以姓名和学号最长长度+1为准 */printf("请输入要要修改的学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) /

37、*比较字符串是否相等*/num=i;printf("-n");printf("1.修改姓名n");printf("2.修改年龄n");printf("3.修改性别n");printf("4.修改出生年月n");printf("5.修改地址n");printf("6.修改电话号码n");printf("7.修改E-mail地址n");printf("8.退出本菜单n");printf("-n");w

38、hile(1)printf("请选择子菜单编号:");scanf("%d",&item);switch(item)case 1:printf("请输入新的姓名:n");scanf("%s",s2);strcpy(,s2); break;case 2:printf("请输入新的年龄:n");scanf("%d",&stunum.age);break;case 3:printf("请输入新的性别:n");scanf(&qu

39、ot;%s",sex1);strcpy(stunum.sex,sex1); break;case 4:printf("请输入新的出生年月:n");scanf("%s",s2);strcpy(stunum.time,s2); break;case 5:printf("请输入新的地址:n");scanf("%s",s2);strcpy(stunum.add,s2); break;case 6:printf("请输入新的电话号码:n");scanf("%s",s2);st

40、rcpy(stunum.tel,s2); break;case 7:printf("请输入新的E-mail地址:n");scanf("%s",s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf("请在1-8之间选择n"); void sort()/*按学号排序*/int i,j,*p,*q,s; char temp10;for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(stuj-1.code,stuj.code)

41、>0)strcpy(temp,stuj-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,);strcpy(,);strcpy(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(st

42、uj.time,temp);strcpy(temp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mail,temp); p=&stuj-1.age; q=&stuj.age; s=*q; *q=*p; *p=s; void

43、 insert() /*插入函数*/ int i=n,j,flag;printf("请输入待增加的学生数:n");scanf("%d",&m);do flag=1;while(flag)flag=0;printf("请输入第 %d 个学生的学号:n",i+1);scanf("%s",stui.code);for(j=0;j<i;j+)if(strcmp(stui.code,stuj.code)=0)printf("已有该学号,请检查后重新录入!n");flag=1;break; /

44、*如有重复立即退出该层循环,提高判断速度*/printf("请输入第 %d 个学生的姓名:n",i+1);scanf("%s",);printf("请输入第 %d 个学生的年龄:n",i+1);scanf("%d",&stui.age);printf("请输入第 %d 个学生的性别:n",i+1);scanf("%s",stui.sex);printf("请输入第 %d 个学生的出生年月:(格式:年.月)n",i+1);scanf

45、("%s",stui.time);printf("请输入第 %d 个学生的地址:n",i+1);scanf("%s",stui.add);printf("请输入第 %d 个学生的电话:n",i+1);scanf("%s",stui.tel);printf("请输入第 %d 个学生的E-mail:n",i+1);scanf("%s",stui.mail);if(flag=0) i=i;i+;while(i<n+m);n+=m;printf("

46、录入完毕!nn");sort(); void del()int i,j,flag=0;char s1LEN+1;printf("请输入要删除学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0) flag=1;for(j=i;j<n-1;j+)stuj=stuj+1;if(flag=0)printf("该学号不存在!n");if(flag=1)printf("删除成功,显示结果请选择菜单6n");n-; void display() int i;printf("所有学生的信息为:n");printf("学生学号 学生姓名 年龄 性别 出生年月 地址 电话 E-mailn");printf("-n");for(i=0;i<n;i+) printf("%-10s%-10s%-6d%-7s%-11s%-9s%-14s%-14sn&

温馨提示

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

评论

0/150

提交评论