2022年南航C语言_课设 .pdf
《2022年南航C语言_课设 .pdf》由会员分享,可在线阅读,更多相关《2022年南航C语言_课设 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、、程序简介 : 程序名称 :学生成绩简单管理程序二(Student Score Manager)程序功能:程序主要功能是用于学生成绩的管理,可以帮助统计人员对学生成绩进行简单的管理,程序包括: 10 个菜单项,其中9 个管理项、 1 个为退出程序项。菜单项包括:一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 1. Create List:按学生姓名汉语拼音顺序建立有序列表。2. Display All Record:在屏幕上
2、显示列表记录。3. Insert a Record:向已建立的有序列表中按序添加记录。4. Delete a Record:在有序列表中查找并删除记录。5. Query:给出学生姓名,在有序列表中查找相关记录并在屏幕上显示该记录。6. Add Records from a Text File:从文本文档输入学生记录并按序插入已有列表。7. Write to a Text File:将列表写入指定位置的文档。8. Reverse List:将现有列表按逆序存放。9. Delete the Same Record:删除列表中相同姓名的记录。0. Quit:退出程序。、题目分析及心得感想题目分析 :
3、该程序要求9 个子程序项,分别实现9 个不同的操作。分析后知:需建立14 个函数才能实现。函数的具体解析请参见第三部分的源文件中。编程中所遇到问题及解决:(1)在程序刚写完时,找出所有错误后,运行程序,但不能完美执行程序的第一项功能:即在进入 1.Create List 程序项后,一次只能输入一个学生的信息。一旦输入一次后,自动调回到主选单(如上图所示)分析后发现:printf(Do You Want To Continue To Input?(Y/N)n) ;scanf(%s, a);while( strcmp (a,Y)!=0& strcmp ( a,N)!=0)其中的 a在函数的开头已被
4、定义,且自己下意识的将其赋值为:a=Y由于这个错误,使a 成为了一个该函数中的一个全局变量,而后的对a的输入赋值对其不起任何作用,于是导致了我设计的程序不能循环输入学生成绩。发现后,我果断将起赋值处给删去,程序完美运行了。(2)在写 Insert 函数时,暴露出我写程序时的思想的不全面性。如下:在Insert 函数的编写中,对于插入节点的情况分析欠缺。没有完全考虑到:链表是空链表时情况,链表插入节点在链表的头、链表插入节点在链表的尾等情况。而后通过于同学讨论,相互帮助,让我想通了所有可能的情况,最后还是成功编写出了。编程心得体会:(1)在编写课程设计之前,可以这样说, 对 C 语言的学习对C
5、语言这门学科的整体把握还是不强!但在课程设计中,各函数的说明,函数的调用,函数的编写,让我真正明白了 C 语言这门学科,其实是很强的一门学科,它训练我们的思维缜密,训练我对新事物的领悟能力。(2)在课程设计中,让我明白了:也许书上的一个小小的知识点,在实际的编程中还是非常重要的,比如:全局变量的定义,各种循环(dowhile, for , while )以及函数的嵌套调用等到等等的实现都非常重要!(3)课程设计我觉得是对书本上所学知识的一个实际运用,在书本上的知识都是死的,只有活学活用才能成功。课程设计的过程非常辛苦,但也非常充实, 它让我复习了课上所学的知识,锻炼了编程的思维。也为 C 语言
6、的最终考试做了准备。新增功能:(1)Reverse List:将现有列表按逆序存放:首先判断链表是否为空,再判断是否为单节点, 或为双节点, 若为两个节点以上, 则定义三个Student指针来循环逆序存放节点,返回头指针。(2)Delete the Same Record:删除列表中相同姓名的记录:首先判断链表是否为空,再判断是否为单节点。若为两节点以上链表则运用两个Student 指针循环比较是否有两个相同的节点,若有则调用Delete 函数删除其中一个,若无返回头指针。、源文件及函数说明#include #include #include #include 二三名师资料总结 - - -精品
7、资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - #include struct stud /*定义结构体 */ char Name20; int Score; struct stud*next; ; typedef struct stud Student; /* 定义结构体stud 替代为 Student * / int menu_select(); Student *Create(void); /* 从键盘输入若干条记录,调用 Insert 函数建立以
8、学生姓名为序的单向链表,返回链表头指针* / void Display(Student *head); /* 显示所有学生的姓名和成绩,每10 条一页,并暂停一下*/ Student *Insert(Student *head,Student *p0); /*按学生姓名序记录s 插入链表 head,返回链表头指针 */ Student *Insert_a_Record(Student *head); /* 输入待插入的学生姓名、成绩,调用Insert函数按姓名作有序插入,输出插入成功信息,返回链表头指针* / Student *Delete(Student *head,char *name);
9、 /*删除姓名为name的记录,输出成功与否的信息。返回链表头指针* / Student *Delete_a_Record(Student *head); /*输入待删除的学生记录的姓名,经确认后调用 Delete 函数删除该姓名记录,返回链表头指针 */Student *Query(Student *head,char *name); /*查找学生姓名为name的记录,查找成功返回该节点地址;否则,返回空指针* / void Query_a_Record(Student *head); /*输入待查找的学生记录的姓名,调用Query函数查找该姓名的记录,输出查找成功与否的信息和节点信息* /
10、 Student *AddfromText(Student *head,char *fileame); /*从文件 filename 添加一批记录到链表中,调用 Insert 函数作有序插入,并显示成功输入的记录, 并返回头指针 */void WritetoText(Student *head,char *fileame); /*将链表中的节点记录全部写入使用者想输入的文件中*/ Student *Reverse(Student *); /*将现有的链表记录逆序存放,返回逆序后的链表头指针* / Student *Delete_Same(Student *); /* 删除链表中姓名形同的记录,
11、返回链表头指针*/ void Quit(Student *head); /*释放链表的动态空间,退出程序* / int n=0; main() Student *head=NULL; while(1) /*菜单选择 */ char filename20; switch(menu_select() case 1:printf(Execution of Create Listn); /* 菜单项 1. Create List* / head=Create(); system(pause); break; case 2:printf(Execution of Display All Recordn)
12、; /* 菜单项 2. Display All Record */ Display(head); system(pause); break; case 3:printf(Execution of Insert a Recordn); /* 菜单项 3. Insert a Record * / head=Insert_a_Record(head); system(pause); break; case 4:printf(Execution of Delete a Recordn); /* 菜单项 4. Delete a Record */ head=Delete_a_Record(head);
13、system(pause); break; case 5:printf(Execution of Queryn); /* 菜单项 5. Query */ Query_a_Record(head); system(pause); break; case 6:printf(Execution of Add Records from a Text Filen); /*菜单项 6. Add Records from a Text File */ printf(Please Input The Name Of The Text File!n); gets(filename); 名师资料总结 - - -精
14、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - AddfromText(head,filename); system(pause); break; case 7:printf(Execution of Write to a Text Filen); /* 菜单项 7. Write to a Text File */ printf(Please Input The Name Of The Text That You Want To Outputn); g
15、ets(filename); WritetoText(head,filename); system(pause); break; case 8: printf(Reverse List:n); /* 菜单项 8. Reverse List * / head=Reverse(head); system(pause); break; case 9: printf(Delete the Same Recordn); /* 菜单项 9. Delete the Same Record */ head=Delete_Same(head); system(pause); break; case 0:prin
16、tf(Execution of Quitn); /* 菜单项 0. Quit * / Quit(head); system(pause); exit(0); int menu_select() /*菜单选择函数 * / int c; dosystem(cls); printf(+WELCOME TO TC PROGRAME+n); printf( Programe Maker:ZHJ 060930118n); printf(1.Create Listn); printf(2.Display All Recordn); printf(3.Insert A Recordn); printf(4.D
17、elete A Recordn); printf(5.Queryn); printf(6.Add Records From A Texl Filen); printf(7.Write To A Texl Filen); printf(8.Reverse Listn); printf(9.Delete The Same Recordn); printf(0.Quitn:); printf(+n); printf(Please Choice And Input 07:n); scanf(%d,&c); while(c9); return(c); /*返回菜单选择的输入序号*/ Student *C
18、reate() /* 创建链表函数,函数返回链表头指针* / Student *head,*s; char a20; head=NULL; printf(Now Create An Increasing List:nn); do /*询问用户循环输入学生成绩*/ printf(Input An Students Name:n); s=(Student *)malloc(sizeof(Student); scanf(%s,s-Name); printf(And Then Input The Students Score n); scanf(%d,&s-Score); head=Insert(he
19、ad,s); printf(Do You Want To Continue To Input?(Y/N)n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - scanf(%s,a); while(strcmp(a,Y)!=0&strcmp(a,N)!=0) printf(Y/N); scanf(%s,a); while(strcmp(a,Y)=0); return(head); /*返回头指针 */ void Display
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年南航C语言_课设 2022 年南航 语言
限制150内