![C语言课程设计报告书_第1页](http://file4.renrendoc.com/view12/M04/31/05/wKhkGWbEKk2AV9DzAADim0p94pI929.jpg)
![C语言课程设计报告书_第2页](http://file4.renrendoc.com/view12/M04/31/05/wKhkGWbEKk2AV9DzAADim0p94pI9292.jpg)
![C语言课程设计报告书_第3页](http://file4.renrendoc.com/view12/M04/31/05/wKhkGWbEKk2AV9DzAADim0p94pI9293.jpg)
![C语言课程设计报告书_第4页](http://file4.renrendoc.com/view12/M04/31/05/wKhkGWbEKk2AV9DzAADim0p94pI9294.jpg)
![C语言课程设计报告书_第5页](http://file4.renrendoc.com/view12/M04/31/05/wKhkGWbEKk2AV9DzAADim0p94pI9295.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(此文档为word格式,下载后您可任意编辑修改!)高级语言程序设计课程设计报告系部名称电子与信息工程系学生姓名专业名称电子信息工程班级学号指导教师时间实验题目学生信息管理系统一、实验目的1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。3.熟练运用if语句和switch语句以及嵌套应用。涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。5.掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。6.掌握结构体类型变量、数组的定义和使用。7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。8.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串二、实验内容学生管理程序具有下列功能:一、输入部分通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学号、出生年月日、年龄、成绩。二、输出部分输出当前已存储的学生信息三、更新部分此部分分为了三个目录:①插入让用户自定义在哪个学生的左侧插入一个新的学生的信息②删除删除用户指定的学生信息③修改修改用户指定的学生信息四、查询部分分为两个目录①按名字查询输出用户查询的学生信息②按学号查询输出用户查询的学生信息查询用户指定的学生信息五、排序此部分分为了两个目录:①按学号排序②按成绩排序六、统计此部分也分为了两个目录:①统计当前一共存储了多少个学生的信息②统计当前存储的学生信息中的男生或女生的人数③统计及格人数④统计不及格人数七、释放开发工具—-Win-TC运行平台——中文DOS运行环境三、需求分析一、函数功能描述⑴输入部分通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学号、出生年月日、年龄、成绩。/*此次做的学生管理系统是利用链表而完成的程序,故第一部分想要实现建立链表*/⑵、输出部分输出当前已存储的学生信息/*通过链表的头结点的地址来依次输出每个结点中的值域中的内容,直至尾结点来实现输出学生信息*/⑶、更新部分此部分分为了三个目录:①插入让用户自定义在哪个学生的左侧插入一个新的学生的信息/*这部分的功能是让用户自定义插在哪个个学生左边,并输入该学生的学号,找到其在链表中存储的结点处插入一个新的结点,而这个新的结点的中的值域存储的是一个新的学生信息,从而实现插入一个新的学生信息*/②删除删除用户指定的学生信息/*这部分的功能是输入学生的学号,找到其在链表中存储的结点处,并将这整个结点删除,再把该结点的前驱结点和后驱节点连接,来实现这个学生信息的删除*/③修改修改用户指定的学生信息/*这部分是利用输入学生的学号,来找到存储该学生信息的结点,通过该结点的链域来修改其中的值域,来实现对学生信息的修改*/⑷、查询部分查询用户指定的学生信息①按名字查询输出用户查询的学生信息/*这部分是利用输入学生的姓名,来找到存储该学生信息的结点,输出该结点的值域中的内容,来实现对学生信息的查询功能*/②按学号查询输出用户查询的学生信息/*同上,只是查询条件为学号*/⑸、排序此部分分为了两个目录:①按学号排序/*此部分程序设计较为复杂,但大致是通过对链表中个结点的值域比较,按小到大的顺序排序,但必须要修改相应的链域,才能实现排序的功能*/②按成绩排序/*此部分和大致内容和按学号排序一样,但不同的是,此处是按大到小的顺序排序*/⑹、统计此部分也分为了两个目录:①统计当前一共存储了多少个学生的信息/*通过输出学生的信息,每输入一个总和数加一,最后输出总和数来实现统计人数*/②统计当前存储的学生信息中的男生或女生的人数/*从头结点开始,一个一个结点的去查看其值域,若性别为男生或女生,总和数加一,最后输出总和数来实现统计男生或女生的人数*/③统计及格人数/*从头结点开始,一个一个结点的去查看其值域,若成绩大于60,总和数加一,最后输出总和数来实现统计及格的人数*/④统计不及格人数/*从头结点开始,一个一个结点的去查看其值域,若成绩小于60,总和数加一,最后输出总和数来实现统计不及格的人数*/⑺、释放这个部分和动态存储分配中的释放空间有着类似的概念,即所建立的链表所申请的存储空间全部释放,也就是说把当前录入的所有学生信息全部删除,本着申请动态存储空间最后要释放的原则,设计了这个部分二、问题的提出如何完成排序部分这个功能的呢?因为使用链表,感觉上排序似乎是整个程序设计中最难的部分,因为要根据结点中值域的内容来对应的修改链域,而链域中的指针问题若不考虑清楚,则很有可能造成链表的混乱,造成某些结点没有连接上或等其他情况,因此本人将排序这部分作为整个程序设计的重点。三.程序可以满足以下功能:1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3.程序能够保证各模块功能的独立和数据共享。/*不使用全局变量则能保证函数之间的独立性,利用形参与实参之间的数值传递来实现数据共享*/4.相近功能以级联菜单的形式集成。四、概要设计1.方案设计2.数据结构说明structdate{intyear,month,day;/*这个结构体的成员代表的是学生的出生年月日*/};structStudent/*这个结构体的成员分别代表了学生的学号、电话、名字、性别、年龄、{成绩、出生年月日*/longnum,tel;charname[11],sex[2];intage,score;structdateBirth;structStudent*next;/*这个是在链表中建立起连接各个结点的链域的一个指向这个};structStudent结构体的指针*/3.模块功能说明在设计的程序中,共设计了intOutput(structStudent*);/*输出当前存储的所有学生信息*/voidOutput_student(structStudent*);/*在查询中显示所查询的学生信息*/structStudent*Find(structStudent*,long);/*在查询、插入、修改函数中使用来寻找到相关的存储了相关的学生信息的结点的前驱结点地址*/structStudent*Creat(long);/*在插入函数中调用,创建一个新的结点,其值域存储一个新的学生信息,并返回指向这个结点的指针,用于插入时与其前驱和后驱结点的链域连接*/voidInsert(structStudent**,long,long);/*在用户指定的结点左边插入一个新的结点,既是把Creat这个函数传递过来的的新结点的指针与其前驱和后驱结点的链域连接*/intInsertNode(structStudent**);/*输出些提示用户操作的语句,只要想要插入的那个学生的学号不为0,则提示插入成功,否则插入失败*/intDelete(structStudent**);/*找到存储了用户指定的学生信息的结点,将其删除*/intRevise(structStudent*);/*找到存储了用户指定的学生信息的结点,修改其值域的内容*/voidRenew(structStudent**);/*建立个子菜单,菜单内有三个目录:一、插入二、删除三、修改四、退出让用户选择*/voidInquire_name(structStudent*);/*输入想查询的学生姓名,从头结点开始,一个一个结点的去查看其值域,若相同,则输出这个结点的值域内的内容*/voidInquire_num(structStudent*);/*输入想查询的学生学号,从头结点开始,一个一个结点的去查看其值域,若相同,则输出这个结点的值域内的内容*/voidInquire(structStudent*);/*建立个子菜单,菜单内有三个目录:一、按姓名查询二、按学号查询三、退出让用户选择*/voidPaixu_num(structStudent**);/*按照学生的学号排序*/voidPaixu_score(structStudent**);/*按照学生的成绩排序*/voidPaixu(structStudent**);/*建立个子菜单,菜单内有三个目录:一、按学号排序二、按成绩排序三、退出让用户选择*/voidSum_people(structStudent*);/*统计学生的个数*/voidSum_sex(structStudent*);/*统计学生中男/女生的个数*/voidSum_pass(structStudent*);/*统计及格人数*/voidSum_no(structStudent*);/*统计不及格人数*/voidSum(structStudent*);/*建立个子菜单,菜单内有三个目录:一、统计学生个数二、统计学生中男/女生的个数三、*统计及格人数四、统计不及格人数五、退出让用户选择*/voidFree(structStudent**);/*删除所有学生的信息,采用不断删除头结点的方式来依次删除所有的结点*/五、详细设计1.主要功能模块的流程图如下:⑴主函数设计过程主函数中因为要建立主菜单所有主函数中并没有什么复杂的的设计过程,较简单。密码部分稍微复杂。而菜单部分只需用switch语句来建立主菜单,以供用户选择。密码部分:使用了一个while循环来判断用户输入的密码是否正确,若正确,则继续执行下面的语句,否则就要不断的输入密码,直至正确,确保了用户资料的保密性。部分源程序如下:voidmain(void){intchoice,code;system("cls");printf("请输入密码:");scanf("%d",&choice);while(choice!=123)/*利用while循环的来实现密码功能*/{printf("\n密码错误!\n");printf("请再输入密码!");scanf("%d",&choice);}printf("\n密码正确!\n");printf("按任意键继续!");bioskey(0);}⑵输入函数设计过程输入部分因为牵扯到链表的建立,所以输入函数比主函数复杂。下面是建立链表的详细过程设计。structStudent*Input1(void){structStudent*h,*p,*q;charname[11];intk;LINE;printf("当前输入的人数序号(输入0结束输入):\n\n");scanf("%d",&k);LINE;h=NULL;while(k>0){p=NEW;/*用动态存储分配来实现创建一个新的结点*/…/*这部分,是给创建结点中的值域赋值*/p->next=NULL;/*给P的下一个结点赋值为0*/if(h==NULL)/*这个部分的执行顺序是①③②③②③…,所以给h一开始赋值为①h=p;NULL为这个用意,这样h空间就存有创建的链表的首地址*/else②q->next=p;/*一开始先执行①③,所以q一开始指向链表的头结点,之后执③q=p;②③②③这样,就让头结点与第二个结点之间的链域连接,再后让q指LINE;向改变,直到第二个结点,依次连接新的结点,直至循环条件结束。*/printf("当前输入的人数序号(输入0结束输入):\n\n");scanf("%d",&k);LINE;}returnh;}⑶输出函数设计过程输出函数和输入函数大致设计过程有相似之处,输出函数也比较简单,就是给输出函数中的形参传递链表的首地址,将h指向头结点,当h不为0时,即还没有到最后一个结点,每次输出对应结点内值域的内容后,再将h指向移到下一个结点,又因为形参在h在输出函数调用后就会被释放,所以并没有改变链表的头结点的地址。for(;h;h=h->next,i++)/*h=h->next是当前结点的值域的内容输出完毕后用来使h的指向指向下一{个结点,再输出这个结点值域的内容,循环直至尾结点输出完毕*/………/*输出值域的内容*/}⑷更新函数这个函数包含了三个模块,插入,删除,修改,因为更新函数与主函数的程序设计一样都是利用switch语句,所以这里只看这三个模块的程序设计。插入红色线修改后的链表情况,这使用了Find这个函数,所以根据Find函数有三种情况:①成功找到相关结点的前驱结点,则返回值p不为NULL且p->next也不为NULL;p不为NULL但p->next=NULL表明所查找得点不存在,则插在最后一个结点处;若返回值p为NULL,所查找的结点就是头结点。因为第二种情况不影响,所以可以将函数设计为if(q){p->next=q->next;q->next=p;}else{p->next=*h;*h=p;}其中p指向创建的新结点,q指向相关结点的前驱结点。删除红色线修改后的链表情况,同样的这也因为Find函数分为了三种情况,为找到相关结点的情况就不予考虑了,这两种情况的方法都是一样的:找到了相关结点,想用temp指向要释放的结点,再越过其指向下一个结点,再释放temp指向的空间。只是第二种还要修改链表的首地址,要不则删除不成功。三、修改修改函数中比较简单,没有像前二个函数那样还有可能修改头地址。修改函数只要利用Find函数来查找到相关的结点,来对应的修改其值域即可。⑸查询函数查询函数分为了两个模块,按姓名查询和按学号查询。同样的也是利用Find函数来查找相关结点,输出此结点值域的内容。程序设计部分相关程序:printf("请输入要查询的学号:");LINE;scanf("%ld",&num);p=Find(h,num);if(p&&(p->next)){p=p->next;Output_student(p);}elseif(p==NULL)Output_student(h);elseprintf("不存在该学生!");同样的根据Find函数分为了两种情况:一是未找到相关结点,则不输出,二、找到了相关结点,输出相关结点的值域内容。⑹排序函数此部分也分为了两个模块,但是程序设计思想基本一致,故只说明其中的一个模块。分为了两种情况:第一是头结点与第二个结点作比较,若头结点内值域中指定的成员值大于第二个结点,则需交换。因为涉及到头结点地址的改变,所以将其单独作为一种情况来讨论。p=(*h)->next;if((p->score)>((*h)->score)){(*h)->next=p->next;p->next=(*h);(*h)=p;根据这个过程可以将其交换。第二种情况:无需改变到头结点的地址,所以这个情况和上述情况的只有稍微差别。for(t=(*h),p=(*h)->next,q=p->next;q&&p;t=t->next){if((q->num)<(p->num)){p->next=q->next;/*这部分若条件为真,则进行交换。*/q->next=p;t->next=q;q=p->next;}else{p=p->next;/*条件为假,无需交换,继续下个结点与其后驱结点的比较*/q=q->next;}这部分的程序设计时,有点类似与冒泡的方法。因为这两种情况执行后相当于用一个结点依次与其后驱结点比较,故再用一个循环,循环次数为最大结点数,这样就可以完成了排序这部分功能的实现。⑺统计函数这个部分分为了四个部分,但是程序设计思想基本一致,故只说明其中的一个模块。统计学生人数模块中,考虑调用Output函数输出,输出一个学生的信息,总和数加一。程序设计voidSum_people(structStudent*h){inti;printf("学生信息:\n");LINE;i=Output(h);LINE;printf("有%d个学生\n",i);printf("按任意键继续!\n");bioskey(0);}调用Output函数,以完成统计的功能。⒉运行结果输入的数据:插入函数的运行:输入个新的学生信息:name:ljnnum:7sex:myear:1988maonth:3day:13age:19score:70tel:335统计函数:统计人数函数的运行(注此时数据有些不同,因为有过修改、删除等操作)查询函数的运行:排序函数的运行:六、调试情况,设计技巧及体会1调试中的主要问题调试中主要出现的问题:⑴经常遇到程序执行到某部分就不运行,而编译和链接都成功,说明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计的程序哪部分考虑不周全。⑵因为这次使用链表来设计程序,就牵扯到形参和实参的问题。曾经因为考虑不周全,在自定义函数前的基类出错,导致相关的值未改变,这里就要考虑好形参和实参的问题。2程序的不足和改进之处因为用链表来设计一个程序,较复杂,最后没来得及,设计相关的文件存储来实现将数据保存,以致每次运行程序都要重新输入新的数据改进之处:可以再考虑编写一个函数,这个函数的功能是将数据写入文件中并保存。3在设计过程中的感受万事开头难,编写一个自定义函数时,要先界定好函数的功能,要有几个形参,返回值是什么类型等问题,还是形参和实参的问题,如果不考虑清楚则自定义函数就很难编写出来。在设计过程中可以帮助自己的编程能力,也可以在一些平时没有考虑甚至考虑不周全的问题上认真的考虑,总的来说,两周的实习是有很大收获的。七、源程序清单#include<stdio.h>#include<string.h>#include<conio.h>#defineLINEprintf("--\n");#defineNEW(structStudent*)malloc(sizeof(structStudent))#defineOK1#defineFALSE0structdate{intyear,month,day;};structStudent{longnum,tel;charname[11],sex[2];intage,score;structdateBirth;structStudent*next;};structStudent*Input();intOutput(structStudent*);/*这部分是所有函数的声明*/voidOutput_student(structStudent*);structStudent*Find(structStudent*,long);structStudent*Creat(long);voidInsert(structStudent**,long,long);intInsertNode(structStudent**);intDelete(structStudent**);intRevise(structStudent*);voidRenew(structStudent**);voidInquire_name(structStudent*);voidInquire_num(structStudent*);voidInquire(structStudent*);voidPaixu_num(structStudent**);voidPaixu_score(structStudent**);voidPaixu(structStudent**);voidSum_people(structStudent*);voidSum_sex(structStudent*);voidSum_pass(structStudent*);voidSum_no(structStudent*);voidSum(structStudent*);voidFree(structStudent**);voidFree(structStudent**h){structStudent*p;while(*h){p=*h;*h=p->next;free(p);}LINE;printf("删除成功!");LINE;bioskey(0);}voidSum(structStudent*h){intchoice;do{system("cls");LINE;printf("\n\n****统计******\n\n");LINE;printf("1.人数\n\n");printf("2.男/女生人数\n\n");printf("3.及格人数\n\n");printf("4.不及格人数\n\n");printf("0.、退出\n\n");printf("请输入(0_4):\n\n");scanf("%d",&choice);switch(choice){case1:Sum_people(h);break;case2:Sum_sex(h);break;case3:Sum_pass(h);break;case4:Sum_no(h);break;case0:break;}}while(choice!=0);}voidSum_no(structStudent*h){inti;printf("学生信息:\n");LINE;Output(h);LINE;for(i=0;h;h=h->next){if((h->num)<60)i++;}printf("不及格的人数有:%d\n",i);printf("按任意键继续!\n");bioskey(0);}voidSum_pass(structStudent*h){inti;printf("学生信息:\n");LINE;Output(h);LINE;for(i=0;h;h=h->next){if((h->num)>60)i++;}printf("及格的人数有:%d\n",i);printf("按任意键继续!\n");bioskey(0);}voidSum_people(structStudent*h){inti;printf("学生信息:\n");LINE;i=Output(h);LINE;printf("有%d个学生\n",i);printf("按任意键继续!\n");bioskey(0);}voidSum_sex(structStudent*h){charsex[2];inti;printf("学生信息:\n");LINE;Output(h);LINE;printf("请选择男生或女生(输入m/f:\n");scanf("%s",sex);for(i=0;h;h=h->next){if(strcmp(h->sex,sex)==0)i++;}printf("%s生一共有%d个:\n",sex,i);printf("按任意键继续!\n");bioskey(0);}voidPaixu(structStudent**head){intchoice;do{system("cls");LINE;printf("\n\n****排序******\n\n");LINE;printf("1.按学号排序\n\n");printf("2.按成绩排序n\n");printf("0.退出\n\n");printf("请输入(0_2):\n\n");scanf("%d",&choice);switch(choice){case1:Paixu_num(head);break;case2:Paixu_score(head);break;case0:break;}}while(choice!=0);}voidPaixu_score(structStudent**h){structStudent*p,*q,*t;inti;for(;i<66;i++){p=(*h)->next;if((p->score)>((*h)->score)){(*h)->next=p->next;p->next=(*h);(*h)=p;}for(t=(*h),p=(*h)->next,q=p->next;q&&p;t=t->next){if((q->score)>(p->score)){p->next=q->next;q->next=p;t->next=q;q=p->next;}else{p=p->next;q=q->next;}}}printf("排序完成!");Output(*h);printf("按任意键继续!");bioskey(0);}voidPaixu_num(structStudent**h){structStudent*p,*q,*t;inti;for(;i<66;i++){p=(*h)->next;if((p->num)<((*h)->num)){(*h)->next=p->next;p->next=(*h);(*h)=p;}for(t=(*h),p=(*h)->next,q=p->next;q&&p;t=t->next){if((q->num)<(p->num)){p->next=q->next;q->next=p;t->next=q;q=p->next;}else{p=p->next;q=q->next;}}}printf("排序完成!");Output(*h);printf("按任意键继续!");bioskey(0);}voidInquire(structStudent*h){intchoice;do{system("cls");LINE;printf("\n\n****查询******\n\n");LINE;printf("1.按名字查询\n\n");printf("2.按学号查询\n\n");printf("0.退出\n\n");printf("请输入(0_2):\n\n");scanf("%d",&choice);switch(choice){case1:Inquire_name(h);break;case2:Inquire_num(h);break;case0:break;}}while(choice!=0);}voidInquire_num(structStudent*h){structStudent*p;longnum;LINE;printf("请输入要查询的学号:");LINE;scanf("%ld",&num);p=Find(h,num);if(p&&(p->next)){p=p->next;Output_student(p);}elseif(p==NULL)Output_student(h);elseprintf("不存在该学生!");bioskey(0);}voidInquire_name(structStudent*h){structStudent*p;charname[11];LINE;printf("请输入要查询的学生姓名");LINE;scanf("%s",name);for(p=NULL;h&&(strcmp(h->name,name)!=0);h=h->next)p=h;if(p&&(p->next)){p=p->next;Output_student(p);}elseif(p==NULL)Output_student(h);elseprintf("该学生不存在!");bioskey(0);}voidRenew(structStudent**head){intchoice;do{system("cls");LINE;printf("\n\n******更新学生信息******\n\n");LINE;printf("1.插入\n\n");printf("2.删除\n\n");printf("3.修改\n\n");printf("0.Exit\n\n");printf("请输入(0_2):\n");scanf("%d",&choice);switch(choice){case1:if(InsertNode(head))printf("插入成功!");elseprintf("插入失败!");bioskey(0);printf("按任意键继续!");break;case2:if(Delete(head))printf("删除成功!");elseprintf("删除失败!");bioskey(0);printf("按任意键继续");break;case3:if(Revise(*head))printf("修改成功!");elseprintf("修改失败!");bioskey(0);printf("按任意键继续!");break;case0:break;}}while(choice!=0);}intRevise(structStudent*h){longnum;structStudent*p;intAction=OK;system("cls");LINE;printf("请输入要修改的学生学号:");LINE;scanf("%ld",&num);p=Find(h,num);if(p&&p->next){p=p->next;printf("newname:\n");scanf("%s",p->name);printf("newnum:\n");scanf("%ld",&p->num);printf("newsex(morf)");scanf("%s",p->sex);printf("newyear:\n");scanf("%d",&(p->Birth.year));printf("newmonth:\n");scanf("%d",&(p->Birth.month));printf("newday:\n");scanf("%d",&(p->Birth.day));printf("newage:\n");scanf("%d",&p->age);printf("newscore:\n");scanf("%d",&p->score);printf("newtel:\n");scanf("%ld",&p->tel);}elseif(p==NULL){printf("newname:\n");scanf("%s",h->name);printf("newnum:\n");scanf("%ld",&h->num);printf("newsex(morf):");scanf("%s",h->sex);printf("newyear:\n");scanf("%d",&(h->Birth.year));printf("newmonth:\n");scanf("%d",&(h->Birth.month));printf("newday:\n");scanf("%d",&(h->Birth.day));printf("newage:\n");scanf("%d",&h->age);printf("newscore:\n");scanf("%d",&h->score);printf("newtel:\n");scanf("%ld",&h->tel);}elseAction=FALSE;Output(h);returnAction;bioskey(0);}intDelete(structStudent**p){longnum;structStudent*q,*temp;intAction=OK;system("cls");LINE;printf("请输入要删除的学生的学号:");LINE;scanf("%ld",&num);q=Find(*p,num);if(q&&q->next){temp=q->next;q->next=temp->next;free(temp);}elseif(q==NULL){temp=*p;*p=temp->next;free(temp);}elseif(q!=NULL&&q->next==NULL)Action=FALSE;Output(*p);returnAction;bioskey(0);}intInsertNode(structStudent**h){longOldnum,Newnum;intAction=OK;system("cls");LINE;printf("插入的功能是:");LINE;Output(*h);LINE;printf("\n若想要在某个学生的左边插入一个新的学生信息的学号,输入该学生的学号:");printf("\n警告!!\n");printf("若找不到该学生,则自动插入到最后一个学生处!\n");scanf("%ld",&Oldnum);LINE;printf("请输入要新的学生的学号");scanf("%ld",&Newnum);if(Newnum>0)Insert(h,Oldnum,Newnum);elseAction=FALSE;Output(*h);returnAction;bioskey(0);}voidInsert(structStudent**h,longOldnum,longNewnum){structStudent*p,*q;p=Creat(Newnum);q=Find(*h,Oldnum);if(q){p->next=q->next;q->next=p;}else{p->next=*h;*h=p;}bioskey(0);}structStudent*Creat(longNewnum){structStudent*p;p=NEW;p->num=Newnum;printf("新的学生的名字:\n");scanf("%s",p->name);printf("性别(morf):");scanf("%s",p->sex);printf("出生的年份:\n");scanf("%d",&(p->Birth.year));printf("出生的月份:\n");scanf("%d",&(p->Birth.month));printf("出生的天数:\n");scanf("%d",&(p->Birth.day));printf("年龄:\n");scanf("%d",&p->age);printf("成绩:\n");scanf("%d",&p->score);printf("电话l:\n");scanf("%ld",&p->tel);p->next=NULL;returnp;}structStudent*Find(structStudent*h,longOldnum){structStudent*p;for(p=NULL;h&&(h->num!=Oldnum);h=h->next)p=h;returnp;}voidOutput_student(structStudent*p){printf("\n\n该学生的信息是:\n");LINE;printf("姓名:%s\n",p->name);printf("学号:%ld\n",p->num);printf("性别:%s\n",p->sex);printf("出生年份:%d\n",p->Birth.year);printf("出生月份:%d\n",p->Birth.month);printf("出生天数:%d\n",p->Birth.day);printf("年龄:%d\n",p->age);printf("成绩:%d\n",p->score);printf("电话:%ld\n",p->tel);LINE;}intOutput(structStudent*h){inti=1;LINE;printf("\n\n学生信息是:\n\n");LINE;for(;h;h=h->next,i++){printf("\n第%d个学生的信息是:\n\n",i);printf("名字:%s\n",h->name);printf("学号:%ld\n",h->num);printf("性别:%s\n",h->sex);printf("出生年份r:%d\n",(h->Birth.year));printf("出生月份:%d\n",(h->Birth.month));printf("出生天数:%d\n",(h->Birth.day));printf("年龄:%d\n",h->age);printf("成绩:%d\n",h->score);printf("电话:%ld\n",h->tel);}LINE;printf("按任意键继续!");LINE;bioskey(0);returni-1;}structStudent*Input1(void){structStudent*h,*p,*q;charname[11];intk;LINE;printf("当前输入的人数序号(输入0结束输入):\n\n");scan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政工程施工中的沉降监测与控制方法
- 2024【合同范本】矿山生产承包合同范本
- 货物运输合同模版
- 2024装修增加项目施工合同模板
- 2024广告植入合同范本
- 部门安全培训考试题附完整答案【易错题】
- 2024场地租赁合同,场地租赁合同范本
- 2024授权代理合同样式
- 项目部安全管理人员安全培训考试题及完整答案(夺冠)
- 新版车间安全培训考试题及参考答案(模拟题)
- 研修文档“认识线段、射线、直线”课堂教学实录
- 沪粤版八年级上册物理全册教案
- GB/T 7124-2008胶粘剂拉伸剪切强度的测定(刚性材料对刚性材料)
- 信用风险管理培训
- 第1课古代的农耕文化课件
- 1.2-《中华人民共和国特种设备安全法》课件ppt课件(完整版)
- 京杭大运河介绍-课件
- 健康教育(我们的身体)课件
- 卧式储罐体积容积计算(带公式)
- 胎膜早破诊疗常规
- 密闭式静脉留置针的使用课件
评论
0/150
提交评论