《C语言编程-课程设计(共14页).doc》由会员分享,可在线阅读,更多相关《C语言编程-课程设计(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上 三江学院SANJIANG U N I V E R S I T Y 综合程序设计与实践指导书(2012年6-7月)题目:开发一个简单的学籍管理程序 所属学院: 电子信息工程学院 学 号: 姓 名: 刘 夫 兴 班 级: A 指导教师: 杨丽萍 老师 综合程序设计与实践指导书一 题目:开发一个简单的学籍管理程序。二 内容包括:1 建立一个学生信息单链表2 输出链表中的学生信息3 在链表中查找某个学生信息4 在链表中插入一个学生结点信息5 在链表中删除一个学生结点6 退出该管理系统三 任务1 设计一个菜单驱动程序(仿照课程设计之一),由老师提供并完成了功能1 2。2 在这
2、个管理系统中加入三个模块,即查找模块、插入模块和删除模块。使程序能正确运行。四提供能使程序能正确运行的源程序清单。 源程序清单, 如下:#include#include#include#includetypedef struct nodeint num;char name20; char sex8; char cla20;char pro20;char adress10;struct node *next;STD;#define LEN sizeof(STD)#define NEW (STD*)malloc(LEN)int menu_select();STD *head1,*head2;int
3、 n=0;void creat1(void) /*追加法建表*/ STD *p1,*p2; system(CLS); head1=NULL; p1=(STD*)malloc(LEN); p2=p1; printf(建表方法1追加法建表!n); printf(请依次输入:n学号 姓名 性别 班级 专业 籍贯 (注:若输入学号为0,则退出建表!)n); scanf(%d%s%s%s%s%s,&p1-num,p1-name,p1-sex,p1-cla,p1-pro,p1-adress); while(p1-num!=0) n+; if(n=1) head1=p1; else p2-next=p1;
4、p2=p1; p1=(STD*)malloc(LEN); scanf(%d%s%s%s%s%s,&p1-num,p1-name,p1-sex,p1-cla,p1-pro,p1-adress); free(p1); p2-next=NULL; scanf(%*c); printf(按回车键继续!n); getchar(); system(CLS); return; void creat2(void) /*插入法建表*/ STD *p1; head2=NULL; system(CLS); p1=(STD*)malloc(LEN); printf(建表方法2 插入法建表!n); printf(请依次
5、输入: 学号 姓名 性别 班级 专业 籍贯(注:若输入学 号为0,则退出建表!)n); scanf(%d%s%s%s%s%s,&p1-num,p1-name,p1-sex,p1-cla,p1-pro,p1-adress); while(p1-num!=0) p1-next=head2; head2=p1; p1=(STD*)malloc(LEN); scanf(%d%s%s%s%s%s,&p1-num,p1-name,p1-sex,p1-cla,p1-pro,p1-adress); scanf(%*c); printf(按回车键继续!n); getchar(); system(CLS); fr
6、ee(p1); return ;void search(struct node *head,char *x) /* 查找函数 */STD *p,*q; if (head=NULL) printf(This is a empty list.); /* 空链表情况 */ else p=head; while (strcmp(x,p-name)!=0 & p-next!=NULL) q=p; p=p-next; /* q指针尾随p指针向表尾移动 */ if (strcmp(x,p-name)=0) printf(查询信息:t学号:%d 姓名:%s 性别:%s 班级:%s 专业:%s 籍贯:%sn,p
7、-num,p-name,p-sex,p-cla,p-pro,p-adress); else printf(Not found.); STD *delnode(struct node *head, char *x) /* 删除函数 */ STD *p,*q; static struct node *h; if (head=NULL) printf(This is a empty list.); /* 空链表情况 */ return head; p=head; while (strcmp(x,p-name)!=0 & p-next!=NULL) q=p;p=p-next; /* q指针尾随p指针向
8、表尾移动 */if (strcmp(x,p-name)=0) if (p=head) head=p-next; /* 删除头结点 */ else q-next=p-next; /* 删除中间或尾结点 */ free(p); /* 释放被删除的结点 */ else printf(Not found.); /* 未找到指定的结点 */ h=head; return h;STD *insert(struct node *head, struct node *p0, char *x) /*插入函数*/ STD *p,*q; static struct node *h; if (head=NULL) h
9、ead=p0; /* 空表时,插入结点 */ p0-next=NULL; else p=head; while (strcmp(x,p-name)!=0 & p-next!=NULL) q=p;p=q-next; if (strcmp(x,p-name)=0) if (p=head) head=p0; /* 在表头插入结点 */ else q-next=p0; /* 在表中间插入结点 */ p0-next=p; else p-next=p0; /* 在表尾插入结点 */ p0-next=NULL; h=head; return h; void print(STD *head) /*输出函数*/
10、 STD *p; p=head; while(p!=NULL) printf(学号: %d 姓名: %s 性别: %s 班级: %s 专业: %s 籍贯:%sn,p-num,p-name,p-sex,p-cla,p-pro,p-adress); p=p-next; printf(n); printf(链表已空!n); scanf(%*c); printf(按回车键继续!n); getchar(); system(CLS);void handle_menu1() int h; STD *add,*head=NULL; char name20; for(;) h=menu_select(); sw
11、itch(h) case 1: creat1(); /*进入追加法建表*/ head=head1;break; case 2: creat2(); /*进入插入法建表*/ head=head2;break; case 3: printf(追加法建表的学籍信息:n); print(head1); /*进入追加法链表的结果*/break; case 4: printf(插入法建表的学籍信息:n);print(head2); /*进入插入法链表的结果*/break; case 5: printf(请输入查询姓名:t);scanf(%s,name);search(head,name); printf(
12、n);break; case 6: add=NEW;printf(*输入插入学生的信息*n); printf(请您依次输入:n学号 姓名 性别 班级 专业 籍贯n); scanf(%d%s%s%s%s%s,&add-num,add-name,add-sex,add-cla,add-pro,add-adress); add-next=NULL; printf(*确定插入位置*n);printf(在指定学生姓名的信息前插入(注:如未找到该学生,则默认将信息插入到尾部)n); printf(姓名:t ); scanf(%s,name); head=insert(head,add,name);prin
13、tf(插入后的学籍信息:n); print(head);break; case 7: printf(请您输入要删除学生信息的姓名:t);scanf(%s,name);head=delnode(head,name);printf(删除后的学生信息:n);print(head);break; case 8: printf(学籍管理系统的信息:n); print(head);break; case 9:printf(亲爱的用户,感谢您的使用, 再见! n);return; int menu_select() /*菜单选择函数*/int cn; printf( 学籍管理系统 n);for(;) pri
14、ntf(n * * * * * 菜单 * * * * * n); printf(t1. 追加法建表n); printf(t2. 插入法建表n); printf(t3. 输出追加法建表的信息n); printf(t4. 输出插入法建表的信息n); printf(t5. 查询 学生信息n); printf(t6. 插入 学生信息n); printf(t7. 删除 学生信息n); printf(t8. 输出学籍管理系统的信息n); printf(t9. 退出程序n); printf(n); printf(亲爱的用户,您好!n请根据菜单栏,按需要选择菜单 1-9:t); scanf(%d,&cn);p
15、rintf(n); if(cn9) printf(nt输入错误,重选1-9:); else break; return cn;void main() /*主函数*/ handle_menu1();五、 调试后使程序能正确运行并应使画面整齐美观。 调试运行并截图如下: 图一 图七 (按照菜单栏顺序,逐一调试运行并截图,其中菜单2、4与菜单1、3类似,在此不再重复截图)图一、菜单1. 追加法建表,输入学生信息图二、菜单3. 输出追加法建表结果的学生信息图三、菜单5. 查询学生信息图四、菜单6. 插入学生信息图五、菜单7. 删除学生信息图六、菜单8. 输出现存的学籍管理系统的信息图七、菜单9. 退出
16、程序六小结(收获体会)不积跬步、无以至千里 两周的课程设计生活在不知不觉间已经结束了,真是意犹未尽呀! 整整两个多星期的日子里,我沉浸在编程的乐趣里,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。可以说,我对C语言是情有独钟,打心眼里喜欢它。从去年一年的C语言学习中我也收获了许多快乐,并且在努力学习的情况下,顺利地通过过了全国及江苏省计算机二级考试,这更让我从中找到了自信。因此,当得知本学期末有C语言课程设计时,当时我心里就乐了。 回顾起此次课程设计,我感慨颇多。虽然偶尔会遇到一些伤脑筋的问题,但总的来说,这个过程充满了兴奋与喜悦!首先,兴奋来自于第一次在充分掌握了基本
17、理论知识后,能成功地将其运用到实践中去;而快乐来自于自己掌握了基本实践技能后,还能够帮助其他同学解决困难。其中,在实训中让我感触最深的就是这么一个道理:不积跬步,无以至千里! 本次课程设计的题目是:开发一个简单的学籍管理程序,是由杨老师全程指导的。我们的进程是按照模块化进行的,有新建链表、查询、删除、插入等模块,每次课堂上,杨老师首先对相关模块的理论知识做一个精讲,然后留给我们充足的时间进行编程调试。当我们有不懂得地方,杨老师还会不厌其烦的讲解。通过这种学习方式,我充分理解了理论与实际相结合的重要性,只有理论知识是远远不够的,唯有把所学的理论知识与实践相结合起来,从实践中得出结论,才算是真正的
18、学习与应用。 同时,我也感到了想要学好C语言还有很长一段路要走,要想真正掌握好编程技术一定要付出更多的努力,当然基本的C语言知识一定要学好,而不是只知道皮毛而已。对于今后的学习我觉得要做好以下几点: 1加深对课堂讲授内容的理解课堂上要老师讲授许多关于c语言的语法规则,听起来有点枯燥无味,也不容易记住,死记硬背是不可取的。课后通过多次上机练习,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定; 2熟悉程序开发环境一个c语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行; 3学会上机调试程序,学会自己找出问题的关键并解决; 因为程序编写完后,往往会出现许多意想不到的错误,这就要发挥调试的重要作用,学会从调试中找到错误,也是学习的一个重要环节! 最后,我觉得模块化的编程理念充分体现了“不积跬步,无以至千里”的哲理所在,任何一个小模块都对整个程序能否正确运行起决定性作用。因此,从这两周的课程设计中,我深刻体会到了:不论是编程还是做其它事情,我们都需要一定的耐心,从基本做起,一步一脚印踏实地走好每一步,只有这样才能走向成功大道。 在此,衷心地感谢杨老师在这两周给予我们的帮助,让我能在程序设计过程中走的更快、更远!专心-专注-专业