您好,欢迎访问三七文档
、程序简介:程序名称:学生成绩简单管理程序二(StudentScoreManager)程序功能:程序主要功能是用于学生成绩的管理,可以帮助统计人员对学生成绩进行简单的管理,程序包括:10个菜单项,其中9个管理项、1个为退出程序项。菜单项包括:一1.CreateList:按学生姓名汉语拼音顺序建立有序列表。2.DisplayAllRecord:在屏幕上显示列表记录。3.InsertaRecord:向已建立的有序列表中按序添加记录。4.DeleteaRecord:在有序列表中查找并删除记录。5.Query:给出学生姓名,在有序列表中查找相关记录并在屏幕上显示该记录。6.AddRecordsfromaTextFile:从文本文档输入学生记录并按序插入已有列表。7.WritetoaTextFile:将列表写入指定位置的文档。8.ReverseList:将现有列表按逆序存放。9.DeletetheSameRecord:删除列表中相同姓名的记录。0.Quit:退出程序。、题目分析及心得感想题目分析:该程序要求9个子程序项,分别实现9个不同的操作。分析后知:需建立14个函数才能实现。函数的具体解析请参见第三部分的源文件中。编程中所遇到问题及解决:(1)在程序刚写完时,找出所有错误后,运行程序,但不能完美执行程序的第一项功能:即在进入1.CreateList程序项后,一次只能输入一个学生的信息。一旦输入一次后,自动调回到主选单(如上图所示)分析后发现:{printf(DoYouWantToContinueToInput?(Y/N)\n);scanf(%s,a);while(strcmp(a,Y)!=0&&strcmp(a,N)!=0)}其中的a在函数的开头已被定义,且自己下意识的将其赋值为:a=‘Y’由于这个错误,使a成为了一个该函数中的一个全局变量,而后的对a的输入赋值对其不起任何作用,于是导致了我设计的程序不能循环输入学生成绩。发现后,我果断将起赋值处给删去,程序完美运行了。(2)在写Insert函数时,暴露出我写程序时的思想的不全面性。如下:在Insert函数的编写中,对于插入节点的情况分析欠缺。没有完全考虑到:链表是空链表时情况,链表插入节点在链表的头、链表插入节点在链表的尾等情况。而后通过于同学讨论,相互帮助,让我想通了所有可能的情况,最后还是成功编写出了。编程心得体会:(1)在编写课程设计之前,可以这样说,对C语言的学习对C语言这门学科的整体把握还是不强!但在课程设计中,各函数的说明,函数的调用,函数的编写,让我真正明白了C语言这门学科,其实是很强的一门学科,它训练我们的思维缜密,训练我对新事物的领悟能力。(2)在课程设计中,让我明白了:也许书上的一个小小的知识点,在实际的编程中还是非常重要的,比如:全局变量的定义,各种循环(dowhile,for,while)以及函数的嵌套调用等到等等的实现都非常重要!(3)课程设计我觉得是对书本上所学知识的一个实际运用,在书本上的知识都是死的,只有活学活用才能成功。课程设计的过程非常辛苦,但也非常充实,它让我复习了课上所学的知识,锻炼了编程的思维。也为C语言的最终考试做了准备。新增功能:(1)ReverseList:将现有列表按逆序存放:首先判断链表是否为空,再判断是否为单节点,或为双节点,若为两个节点以上,则定义三个Student指针来循环逆序存放节点,返回头指针。(2)DeletetheSameRecord:删除列表中相同姓名的记录:首先判断链表是否为空,再判断是否为单节点。若为两节点以上链表则运用两个Student指针循环比较是否有两个相同的节点,若有则调用Delete函数删除其中一个,若无返回头指针。、源文件及函数说明#includestdio.h#includestdlib.h#includectype.h#includealloc.h二三#includestring.hstructstud/*定义结构体*/{charName[20];intScore;structstud*next;};typedefstructstudStudent;/*定义结构体stud替代为Student*/intmenu_select();Student*Create(void);/*从键盘输入若干条记录,调用Insert函数建立以学生姓名为序的单向链表,返回链表头指针*/voidDisplay(Student*head);/*显示所有学生的姓名和成绩,每10条一页,并暂停一下*/Student*Insert(Student*head,Student*p0);/*按学生姓名序记录s插入链表head,返回链表头指针*/Student*Insert_a_Record(Student*head);/*输入待插入的学生姓名、成绩,调用Insert函数按姓名作有序插入,输出插入成功信息,返回链表头指针*/Student*Delete(Student*head,char*name);/*删除姓名为name的记录,输出成功与否的信息。返回链表头指针*/Student*Delete_a_Record(Student*head);/*输入待删除的学生记录的姓名,经确认后调用Delete函数删除该姓名记录,返回链表头指针*/Student*Query(Student*head,char*name);/*查找学生姓名为name的记录,查找成功返回该节点地址;否则,返回空指针*/voidQuery_a_Record(Student*head);/*输入待查找的学生记录的姓名,调用Query函数查找该姓名的记录,输出查找成功与否的信息和节点信息*/Student*AddfromText(Student*head,char*fileame);/*从文件filename添加一批记录到链表中,调用Insert函数作有序插入,并显示成功输入的记录,并返回头指针*/voidWritetoText(Student*head,char*fileame);/*将链表中的节点记录全部写入使用者想输入的文件中*/Student*Reverse(Student*);/*将现有的链表记录逆序存放,返回逆序后的链表头指针*/Student*Delete_Same(Student*);/*删除链表中姓名形同的记录,返回链表头指针*/voidQuit(Student*head);/*释放链表的动态空间,退出程序*/intn=0;main(){Student*head=NULL;while(1)/*菜单选择*/{charfilename[20];switch(menu_select()){case1:printf(ExecutionofCreateList\n);/*菜单项1.CreateList*/head=Create();system(pause);break;case2:printf(ExecutionofDisplayAllRecord\n);/*菜单项2.DisplayAllRecord*/Display(head);system(pause);break;case3:printf(ExecutionofInsertaRecord\n);/*菜单项3.InsertaRecord*/head=Insert_a_Record(head);system(pause);break;case4:printf(ExecutionofDeleteaRecord\n);/*菜单项4.DeleteaRecord*/head=Delete_a_Record(head);system(pause);break;case5:printf(ExecutionofQuery\n);/*菜单项5.Query*/Query_a_Record(head);system(pause);break;case6:printf(ExecutionofAddRecordsfromaTextFile\n);/*菜单项6.AddRecordsfromaTextFile*/printf(PleaseInputTheNameOfTheTextFile!\n);gets(filename);AddfromText(head,filename);system(pause);break;case7:printf(ExecutionofWritetoaTextFile\n);/*菜单项7.WritetoaTextFile*/printf(PleaseInputTheNameOfTheTextThatYouWantToOutput\n);gets(filename);WritetoText(head,filename);system(pause);break;case8:printf(ReverseList:\n);/*菜单项8.ReverseList*/head=Reverse(head);system(pause);break;case9:printf(DeletetheSameRecord\n);/*菜单项9.DeletetheSameRecord*/head=Delete_Same(head);system(pause);break;case0:printf(ExecutionofQuit\n);/*菜单项0.Quit*/Quit(head);system(pause);exit(0);}}}intmenu_select()/*菜单选择函数*/{intc;do{system(cls);printf(++++++++++++++++++++++++++++++WELCOMETOTCPROGRAME++++++++++++++++++++++++\n);printf(ProgrameMaker:ZHJ060930118\n);printf(1.CreateList\n);printf(2.DisplayAllRecord\n);printf(3.InsertARecord\n);printf(4.DeleteARecord\n);printf(5.Query\n);printf(6.AddRecordsFromATexlFile\n);printf(7.WriteToATexlFile\n);printf(8.ReverseList\n);printf(9.DeleteTheSameRecord\n);printf(0.Quit\n:);printf(+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n);printf(PleaseChoiceAndInput0~7:\n);scanf(%d,&c);}while(c0||c9);return(c);/*返回菜单选择的输入序号*/}Student*Create()/*创建链表函数,函数返回链表头指针*/{Student*head,*s;chara[20];head=NULL;printf(NowCreateAnIncreasingList:\n\n);do/*询问用户循环输入学生成绩*/{printf(InputAnStudent'sName:\n);s=(Student*)malloc(sizeof(Student));scanf(%s,s-Name);printf(AndThenInputTheStudent'sScore\n);scanf(%d,&s-Score);head=Insert(head,s);printf(DoYouWantToContinueToInput?(Y/N)\n);scanf(%s,a);while(strcmp(a,Y)!=0&&strcmp(a,N)!=0){printf((Y/N));scanf(%s,a);}}while(strcmp(a,Y)==0);return(***
本文标题:南航C语言-课设
链接地址:https://www.777doc.com/doc-5220054 .html