SANJIANG U N I V E R S I T Y
综合程序设计与实践
★
指导书 (2012年6-7月)
题目:开发一个简单的学籍管理程序
所属学院: 电子信息工程学院
学 号: 12010091010 姓 名: 刘 夫 兴 班 级: 110091A
指导教师: 杨丽萍 老师
综合程序设计与实践
指导书
cheng
一. 题目:开发一个简单的学籍管理程序。 二. 内容包括:
1. 建立一个学生信息单链表 2. 输出链表中的学生信息 3. 在链表中查找某个学生信息 4. 在链表中插入一个学生结点信息 5. 在链表中删除一个学生结点 6. 退出该管理系统
三. 任务
1. 设计一个菜单驱动程序(仿照课程设计之一),由老师
提供并完成了功能1.— 2.。
2. 在这个管理系统中加入三个模块,即查找模块、插入模
块和删除模块。使程序能正确运行。
四.提供能使程序能正确运行的源程序清单。
源程序清单, 如下:
#include #include int num; char name[20]; char sex[8]; char cla[20]; char pro[20]; char adress[10]; struct node *next; }STD; cheng cheng #define LEN sizeof(STD) #define NEW (STD*)malloc(LEN) int menu_select(); STD *head1,*head2; int 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->adress); while(p1->num!=0) { n++; if(n==1) head1=p1; else p2->next=p1; p2=p1; p1=(STD*)malloc(LEN); scanf(\"%d%s%s%s%s%s\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(\"请依次输入: 学号 姓名 性别 班级 专业 籍贯(注:若输入学 cheng cheng 号为0,则退出建表!)\\n\"); scanf(\"%d%s%s%s%s%s\p1->adress); while(p1->num!=0) { p1->next=head2; head2=p1; p1=(STD*)malloc(LEN); scanf(\"%d%s%s%s%s%s\p1->adress); } scanf(\"%*c\"); printf(\"按回车键继续!\\n\"); getchar(); system(\"CLS\"); free(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(\"查询信息:\学号:%d 姓名:%s 性别:%s 班级:%s 专业:%s 籍贯:%s\\n\ } 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.\"); /* 空链表情况 */ cheng cheng return head; } p=head; while (strcmp(x,p->name)!=0 && p->next!=NULL) { q=p;p=p->next;} /* q指针尾随p指针向表尾移动 */ 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) { head=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; cheng cheng return h; } void print(STD *head) /*输出函数*/ { STD *p; p=head; while(p!=NULL) { printf(\"学号: %d 姓名: %s 性别: %s 班级: %s 专业: %s 籍贯:%s\\n\ p=p->next; } printf(\"\\n\"); printf(\"链表已空!\\n\"); scanf(\"%*c\"); printf(\"按回车键继续!\\n\"); getchar(); system(\"CLS\"); } void handle_menu1() { int h; STD *add,*head=NULL; char name[20]; for(;;) { h=menu_select(); switch(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: cheng cheng printf(\"请输入查询姓名:\\"); scanf(\"%s\ search(head,name); printf(\"\\n\"); break; case 6: add=NEW; printf(\"***输入插入学生的信息***\\n\"); printf(\"请您依次输入:\\n学号 姓名 性别 班级 专业 籍贯\\n\"); scanf(\"%d%s%s%s%s%s\>pro,add->adress); add->next=NULL; printf(\"***确定插入位置***\\n\"); printf(\"在指定学生姓名的信息前插入(注:如未找到该学生,则默认将信息插入到尾部)\\n\"); printf(\"姓名:\ \"); scanf(\"%s\ head=insert(head,add,name); printf(\"插入后的学籍信息:\\n\"); print(head); break; case 7: printf(\"请您输入要删除学生信息的姓名:\\"); scanf(\"%s\ 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; cheng cheng printf(\" ≮≮ 学籍管理系统 ≯≯ \\n\"); for(;;) { printf(\"\\n * * * * 〈 * 菜单 * 〉* * * * \\n\"); printf(\"\1. 追加法建表\\n\"); printf(\"\2. 插入法建表\\n\"); printf(\"\3. 输出追加法建表的信息\\n\"); printf(\"\4. 输出插入法建表的信息\\n\"); printf(\"\5. 查询 学生信息\\n\"); printf(\"\6. 插入 学生信息\\n\"); printf(\"\7. 删除 学生信息\\n\"); printf(\"\8. 输出学籍管理系统的信息\\n\"); printf(\"\9. 退出程序\\n\"); printf(\"\\n\"); printf(\"亲爱的用户,您好!\\n请根据菜单栏,按需要选择菜单 1-9:\\"); scanf(\"%d\ if(cn<1||cn>9) printf(\"\\n\输入错误,重选1-9:\"); else break; } return cn; } void main() /*主函数*/ { handle_menu1(); } 五、 调试后使程序能正确运行并应使画面整齐美观。 调试运行并截图如下: 图一 ~ 图七 (按照菜单栏顺序,逐一调试运行并截图, 其中菜单2、4与菜单1、3类似,在此不再重复截图) 图一、菜单1. 追加法建表,输入学生信息 cheng cheng 图二、菜单3. 输出追加法建表结果的学生信息 图三、菜单5. 查询学生信息 cheng cheng 图四、菜单6. 插入学生信息 图五、菜单7. 删除学生信息 cheng cheng 图六、菜单8. 输出现存的学籍管理系统的信息 图七、菜单9. 退出程序 cheng cheng 六.小结(收获体会) 不积跬步、无以至千里 两周的课程设计生活在不知不觉间已经结束了,真是意犹未尽呀! 整整两个多星期的日子里,我沉浸在编程的乐趣里,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。可以说,我对C语言是情有独钟,打心眼里喜欢它。从去年一年的C语言学习中我也收获了许多快乐,并且在努力学习的情况下,顺利地通过过了全国及江苏省计算机二级考试,这更让我从中找到了自信。因此,当得知本学期末有C语言课程设计时,当时我心里就乐了。 回顾起此次课程设计,我感慨颇多。虽然偶尔会遇到一些伤脑筋的问题,但总的来说,这个过程充满了兴奋与喜悦!首先,兴奋来自于第一次在充分掌握了基本理论知识后,能成功地将其运用到实践 cheng cheng 中去;而快乐来自于自己掌握了基本实践技能后,还能够帮助其他同学解决困难。其中,在实训中让我感触最深的就是这么一个道理:不积跬步,无以至千里! 本次课程设计的题目是:开发一个简单的学籍管理程序,是由杨老师全程指导的。我们的进程是按照模块化进行的,有新建链表、查询、删除、插入等模块,每次课堂上,杨老师首先对相关模块的理论知识做一个精讲,然后留给我们充足的时间进行编程调试。当我们有不懂得地方,杨老师还会不厌其烦的讲解。通过这种学习方式,我充分理解了理论与实际相结合的重要性,只有理论知识是远远不够的,唯有把所学的理论知识与实践相结合起来,从实践中得出结论,才算是真正的学习与应用。 同时,我也感到了想要学好C语言还有很长一段路要走,要想真正掌握好编程技术一定要付出更多的努力,当然基本的C语言知识一定要学好,而不是只知道皮毛而已。对于今后的学习我觉得要做好以下几点: 1.加深对课堂讲授内容的理解 课堂上要老师讲授许多关于c语言的语法规则,听起来有点枯燥无味,也不容易记住,死记硬背是不可取的。课后通过多次上机练习,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定; 2.熟悉程序开发环境 一个c语言程序从编辑、编译、连接到运行,都要在一定的外部 cheng cheng 操作环境下才能进行; 3.学会上机调试程序,学会自己找出问题的关键并解决; 因为程序编写完后,往往会出现许多意想不到的错误,这就要发挥调试的重要作用,学会从调试中找到错误,也是学习的一个重要环节! 最后,我觉得模块化的编程理念充分体现了“不积跬步,无以至千里”的哲理所在,任何一个小模块都对整个程序能否正确运行起决定性作用。因此,从这两周的课程设计中,我深刻体会到了:不论是编程还是做其它事情,我们都需要一定的耐心,从基本做起,一步一脚印踏实地走好每一步,只有这样才能走向成功大道。 在此,衷心地感谢杨老师在这两周给予我们的帮助,让我能在程序设计过程中走的更快、更远! cheng 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务