您好,欢迎来到年旅网。
搜索
您的当前位置:首页C语言编程课程设计

C语言编程课程设计

来源:年旅网
 三江学院

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 #include #include typedef struct node {

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务