ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:85.93KB ,
资源ID:5383572      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5383572.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言课程设计报告书罗靖.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言课程设计报告书罗靖.docx

1、C语言课程设计报告书罗靖(此文档为word格式,下载后您可任意编辑修改!)西安郵電學院 高级语言程序设计课程设计报告系 部 名 称电子与信息工程系学生姓名罗靖专业名称电子信息工程班 级电子0701学号指导教师衡霞时间2008年06月09日至 2008年06月20日实验题目学生信息管理系统 一、实验目的1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。 2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。 3.熟练运用if语句和switch语句以及嵌套应用。涉及循环调用的,了解并掌握三种控制语句while、do-wh

2、ile和for语句。 4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。 5. 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 6.掌握结构体类型变量、数组的定义和使用。 7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。 8. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串二、实验内容学生管理程序具有下列功能:一、输入部分通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学号、出生年月日、年龄、成绩。二、输出部分输出当前

3、已存储的学生信息三、更新部分此部分分为了三个目录:插入 让用户自定义在哪个学生的左侧插入一个新的学生的信息删除 删除用户指定的学生信息 修改 修改用户指定的学生信息四、查询部分分为两个目录按名字查询 输出用户查询的学生信息按学号查询 输出用户查询的学生信息查询用户指定的学生信息 五、排序 此部分分为了两个目录:按学号排序按成绩排序六、统计此部分也分为了两个目录:统计当前一共存储了多少个学生的信息统计当前存储的学生信息中的男生或女生的人数统计及格人数统计不及格人数七、释放开发工具Win-TC运行平台中文DOS运行环境三、需求分析一、函数功能描述输入部分通过键盘输入多位学生的学生信息。学生的信息包

4、含有:学生姓名、性别、学号、出生年月日、年龄、成绩。*此次做的学生管理系统是利用链表而完成的程序,故第一部分想要实现建立链表*、输出部分输出当前已存储的学生信息 *通过链表的头结点的地址来依次输出每个结点中的值域中的内容,直至尾结点来实现输出学生信息*、更新部分此部分分为了三个目录:插入 让用户自定义在哪个学生的左侧插入一个新的学生的信息 *这部分的功能是让用户自定义插在哪个个学生左边,并输入该学生的学号,找到其在链表中存储的结点处插入一个新的结点,而这个新的结点的中的值域存储的是一个新的学生信息,从而实现插入一个新的学生信息*删除 删除用户指定的学生信息 *这部分的功能是输入学生的学号,找到

5、其在链表中存储的结点处,并将这整个结点删除,再把该结点的前驱结点和后驱节点连接,来实现这个学生信息的删除*修改 修改用户指定的学生信息 *这部分是利用输入学生的学号,来找到存储该学生信息的结点,通过该结点的链域来修改其中的值域,来实现对学生信息的修改*、查询部分查询用户指定的学生信息按名字查询 输出用户查询的学生信息*这部分是利用输入学生的姓名,来找到存储该学生信息的结点,输出该结点的值域中的内容,来实现对学生信息的查询功能*按学号查询 输出用户查询的学生信息*同上,只是查询条件为学号 *、排序 此部分分为了两个目录:按学号排序 *此部分程序设计较为复杂,但大致是通过对链表中个结点的值域比较,

6、按小到大的顺序排序,但必须要修改相应的链域,才能实现排序的功能*按成绩排序 *此部分和大致内容和按学号排序一样,但不同的是,此处是按大到小的顺序排序*、统计此部分也分为了两个目录:统计当前一共存储了多少个学生的信息 *通过输出学生的信息,每输入一个总和数加一,最后输出总和数来实现统计人数*统计当前存储的学生信息中的男生或女生的人数 *从头结点开始,一个一个结点的去查看其值域,若性别为男生或女生,总和数加一,最后输出总和数来实现统计男生或女生的人数*统计及格人数*从头结点开始,一个一个结点的去查看其值域,若成绩大于60,总和数加一,最后输出总和数来实现统计及格的人数*统计不及格人数*从头结点开始

7、,一个一个结点的去查看其值域,若成绩小于60,总和数加一,最后输出总和数来实现统计不及格的人数*、释放这个部分和动态存储分配中的释放空间有着类似的概念,即所建立的链表所申请的存储空间全部释放,也就是说把当前录入的所有学生信息全部删除,本着申请动态存储空间最后要释放的原则,设计了这个部分二、问题的提出如何完成排序部分这个功能的呢?因为使用链表,感觉上排序似乎是整个程序设计中最难的部分,因为要根据结点中值域的内容来对应的修改链域,而链域中的指针问题若不考虑清楚,则很有可能造成链表的混乱,造成某些结点没有连接上或等其他情况,因此本人将排序这部分作为整个程序设计的重点。三.程序可以满足以下功能: 1.

8、各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3.程序能够保证各模块功能的独立和数据共享。*不使用全局变量则能保证函数之间的独立性,利用形参与实参之间的数值传递来实现数据共享*4.相近功能以级联菜单的形式集成。四、概要设计1.方案设计 2.数据结构说明struct date int year,month,day; *这个结构体的成员代表的是学生的出生年月日*;struct Student *这个结构体的成员分别代表了学生的学号、电话、名字、性别、年龄、 成绩、出生年月日* long num,tel; char name11,sex2

9、; int age,score; struct date Birth; struct Student *next; *这个是在链表中建立起连接各个结点的链域的一个指向这个; struct Student 结构体的指针* 3.模块功能说明在设计的程序中,共设计了int Output(struct Student *); *输出当前存储的所有学生信息*void Output_student(struct Student *);*在查询中显示所查询的学生信息*struct Student *Find(struct Student *,long); *在查询、插入、修改函数中使用来寻找到相关的存储了相

10、关的学生信息的结点的前驱结点地址*struct Student *Creat(long); *在插入函数中调用,创建一个新的结点,其值域存储一个新的学生信息,并返回指向这个结点的指针,用于插入时与其前驱和后驱结点的链域连接*void Insert(struct Student *,long,long); *在用户指定的结点左边插入一个新的结点,既是把Creat这个函数传递过来的的新结点的指针与其前驱和后驱结点的链域连接*int InsertNode(struct Student *);*输出些提示用户操作的语句,只要想要插入的那个学生的学号不为0,则提示插入成功,否则插入失败*int Dele

11、te(struct Student *);*找到存储了用户指定的学生信息的结点,将其删除*int Revise(struct Student *);*找到存储了用户指定的学生信息的结点,修改其值域的内容*void Renew(struct Student *);*建立个子菜单,菜单内有三个目录:一、插入 二、删除三、修改 四、退出 让用户选择 *void Inquire_name(struct Student *);*输入想查询的学生姓名,从头结点开始,一个一个结点的去查看其值域,若相同,则输出这个结点的值域内的内容*void Inquire_num(struct Student *);*输入

12、想查询的学生学号,从头结点开始,一个一个结点的去查看其值域,若相同,则输出这个结点的值域内的内容*void Inquire(struct Student *);*建立个子菜单,菜单内有三个目录:一、按姓名查询二、 按学号查询三、退出 让用户选择 *void Paixu_num(struct Student *);*按照学生的学号排序*void Paixu_score(struct Student *);*按照学生的成绩排序*void Paixu(struct Student *);*建立个子菜单,菜单内有三个目录:一、按学号排序二、按成绩排序 三、退出 让用户选择 *void Sum_peop

13、le(struct Student *);*统计学生的个数*void Sum_sex(struct Student *);*统计学生中男女生的个数*void Sum_pass(struct Student *);*统计及格人数*void Sum_no(struct Student *);*统计不及格人数*void Sum(struct Student *);*建立个子菜单,菜单内有三个目录:一、统计学生个数二、统计学生中男女生的个数 三、*统计及格人数 四、统计不及格人数 五、退出 让用户选择 *void Free(struct Student *);*删除所有学生的信息,采用不断删除头结点的

14、方式来依次删除所有的结点*五、详细设计1.主要功能模块的流程图如下:主函数设计过程主函数中因为要建立主菜单所有主函数中并没有什么复杂的的设计过程,较简单。密码部分稍微复杂。而菜单部分只需用switch语句来建立主菜单,以供用户选择。密码部分:使用了一个while循环来判断用户输入的密码是否正确,若正确,则继续执行下面的语句,否则就要不断的输入密码,直至正确,确保了用户资料的保密性。部分源程序如下:void main(void) int choice,code; system(cls); printf(请输入密码:); scanf(%d,&choice); while(choice!=123)

15、*利用while循环的来实现密码功能* printf(n 密码错误!n); printf(请再输入密码!); scanf(%d,&choice); printf(n密码正确!n); printf(按任意键继续!); bioskey(0);输入函数设计过程输入部分因为牵扯到链表的建立,所以输入函数比主函数复杂。下面是建立链表的详细过程设计。struct Student *Input1(void) struct Student *n); scanf(%d,&k); LINE; n); scanf(%d,&k); LINE; return ); LINE; i=Output(,i); printf(

16、按任意键继续!n); bioskey(0);调用Output函数,以完成统计的功能。运行结果输入的数据:插入函数的运行:输入个新的学生信息:name:lj nnum:7 sex:m year:1988 maonth:3 day:13 age:19 score:70 tel:335统计函数:统计人数函数的运行(注此时数据有些不同,因为有过修改、删除等操作)查询函数的运行:排序函数的运行:六、调试情况,设计技巧及体会1调试中的主要问题调试中主要出现的问题:经常遇到程序执行到某部分就不运行,而编译和链接都成功,说明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计的程序哪部分考虑不周全。因为

17、这次使用链表来设计程序,就牵扯到形参和实参的问题。曾经因为考虑不周全,在自定义函数前的基类出错,导致相关的值未改变,这里就要考虑好形参和实参的问题。2程序的不足和改进之处因为用链表来设计一个程序,较复杂,最后没来得及,设计相关的文件存储来实现将数据保存,以致每次运行程序都要重新输入新的数据改进之处:可以再考虑编写一个函数,这个函数的功能是将数据写入文件中并保存。3在设计过程中的感受万事开头难,编写一个自定义函数时,要先界定好函数的功能,要有几个形参,返回值是什么类型等问题,还是形参和实参的问题,如果不考虑清楚则自定义函数就很难编写出来。在设计过程中可以帮助自己的编程能力,也可以在一些平时没有考

18、虑甚至考虑不周全的问题上认真的考虑,总的来说,两周的实习是有很大收获的。七、源程序清单#include name); printf( new num:n); scanf(%ld,&p-num); printf(new sex(morf); scanf(%s,p-sex); printf(new year:n); scanf(%d,&(p-Birth.year); printf(new month:n); scanf(%d,&(p-Birth.month); printf(new day:n); scanf(%d,&(p-Birth.day); printf(new age:n); scanf(

19、%d,&p-age); printf(new score:n); scanf(%d,&p-score); printf(new tel:n); scanf(%ld,&p-tel); else if(p=NULL) printf(new name:n); scanf(%s,); scanf(%ld,&); scanf(%d,&(); scanf(%d,&(); scanf(%d,&(); scanf(%d,&); scanf(%d,&); scanf(%ld,&=FALSE; Output( Action; bioskey(0);int Delete(struct Student *p) lon

20、g num; struct Student *q,*temp; int Action=OK; system(cls); LINE; printf(请输入要删除的学生的学号:); LINE; scanf(%ld,&num); q=Find(*p,num); if(q&q-next) temp=q-next; q-next=temp-next; free(temp); else if(q=NULL) temp=*p; *p=temp-next; free(temp); else if(q!=NULL&q-next=NULL) Action=FALSE; Output(*p); return Act

21、ion; bioskey(0);int InsertNode(struct Student *=OK; system(cls); LINE; printf( 插入的功能是:); LINE; Output(*); printf(若找不到该学生,则自动插入到最后一个学生处!n); scanf(%ld,&Oldnum); LINE; printf(请输入要新的学生的学号); scanf(%ld,&Newnum); if(Newnum0) Insert(=FALSE; Output(* Action; bioskey(0);void Insert(struct Student *); scanf(%s

22、,p-name); printf(性别(m or f):); scanf(%s,p-sex); printf(出生的年份:n); scanf(%d,&(p-Birth.year); printf(出生的月份:n); scanf(%d,&(p-Birth.month); printf(出生的天数:n); scanf(%d,&(p-Birth.day); printf(年龄:n); scanf(%d,&p-age); printf(成绩:n); scanf(%d,&p-score); printf(电话l:n); scanf(%ld,&p-tel); p-next=NULL; return p;struct Student *Find(struct S

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1