您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > c语言程序设计之学生选修课系统设计代码
#includestdio.h#includestring.h#includemalloc.h#includestdlib.h#includeconio.hintn=0;//n为结点个数structkecheng//声明结构体{intbianhao;charname[10];charxingzhi[10];intzongxueshi;intshoukexueshi;intshangjixueshi;floatxuefen;intkaikexueqi;structkecheng*next;};structkecheng*head;structkecheng*creat()//创建链表.此函数带回一个指向链表头的指针{voidsave(structkecheng*head);printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);structkecheng*head,*p1,*p2;p1=p2=(structkecheng*)malloc(sizeof(structkecheng));//开辟一个新单元scanf(%d,&p1-bianhao);head=NULL;while(p1-bianhao!=0){scanf(%s%s%d%d%d%f%d,p1-name,p1-xingzhi,&p1-zongxueshi,&p1-shoukexueshi,&p1-shangjixueshi,&p1-xuefen,&p1-kaikexueqi);n++;if(n==1)head=p1;elsep2-next=p1;p2=p1;p1=(structkecheng*)malloc(sizeof(structkecheng));scanf(%d,&p1-bianhao);}p2-next=NULL;save(head);return(head);}voidsave(structkecheng*head)//保存到文件中{structkecheng*p;FILE*fp;fp=fopen(所有课程信息.txt,w);//把输入的课程信息在kecheng.txt中保存p=head;while(p!=NULL){fprintf(fp,%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);p=p-next;}fclose(fp);}voidchakan(structkecheng*head)//查看所有课程信息,即可以选的课程{structkecheng*p;p=head;printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);while(p!=NULL){printf(%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);p=p-next;}}voidsearch(structkecheng*head)//按编号或性质查询{inta,bianhao;//a为对菜单进行选择的变量intflag=1;//flag为判断是否找到该课程charxingzhi[10];structkecheng*p;printf(若要按课程性质查找请输入1\n);printf(若要按课程编号查找请输入2\n);printf(退出查询请按0\n);scanf(%d,&a);while(a!=0){switch(a){case1:printf(请输入要查找的课程的性质:\n);//以课程性质选课scanf(%s,xingzhi);printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);p=head;while(p!=NULL){if(strcmp(xingzhi,p-xingzhi)==0){printf(%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);flag=0;}p=p-next;}if(flag==1)printf(对不起,未找到,请重新输入或退出!\n);flag=1;break;case2:printf(输入要查找的课程的编号\n);//以课程编号选课scanf(%d,&bianhao);printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);p=head;while(p!=NULL){if(p-bianhao==bianhao){printf(%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);flag=0;}p=p-next;}if(flag==1)printf(对不起,未找到,请重新输入或退出!\n);flag=1;break;}printf(若要按课程性质查找请输入1\n);printf(若要按课程编号查找请输入2\n);printf(退出查询请按0\n);scanf(%d,&a);}}voidxuanke(structkecheng*head)//学生按编号选课{FILE*fp;fp=fopen(学生已选课.txt,w);intbianhao,i=0,j,a[20];//数组a中存放已选好的课程structkecheng*p;floats=0;//s为统计所选课程的学分printf(请输入你想选的课程编号,以0结束:\n);scanf(%d,&bianhao);while(bianhao!=0){for(j=0;ji;j++)//判断该课程是否你已经选过if(bianhao==a[j]){printf(你已选了该课程,请重新输入或以0退出:\n);scanf(%d,&bianhao);continue;}p=head;while(p!=NULL)//从链表表头开始寻找该课程{if(bianhao!=p-bianhao)p=p-next;elsebreak;}if(p==NULL)printf(无此课程,请重新输入\n);else{s=s+p-xuefen;//若选课成功,就把该课程的学分累加printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);printf(%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);a[i]=bianhao;fprintf(fp,%d\t%s\t%s\t%d\t%d\t%d\t%.1f\t%d\n,p-bianhao,p-name,p-xingzhi,p-zongxueshi,p-shoukexueshi,p-shangjixueshi,p-xuefen,p-kaikexueqi);i++;}scanf(%d,&bianhao);}fclose(fp);if(s60)printf(选课失败\n);elseprintf(选课成功\n);}structkecheng*del(structkecheng*head)//删除一门课程{intm;//m为想删除课程的编号structkecheng*p1,*p2;p1=head;printf(请输入你要删除课程的编号,以0结束:\n);scanf(%d,&m);while(m!=0){while(m!=p1-bianhao&&p1-next!=NULL)//p1指向的不是所要找的课程编号{p2=p1;p1=p1-next;//p1后移一个结点}if(m==p1-bianhao){if(p1==head)//若p1指向的是首结点,把第二个结点地址赋给headhead=p1-next;//否则将下一结点地址赋给前一结点地址elsep2-next=p1-next;n=n-1;}elseprintf(找不到你要删除的课程!\n);scanf(%d,&m);}save(head);return(head);}structkecheng*insert(structkecheng*head)//增加一门课程的函数{structkecheng*p0,*p1,*p2;//insert_kc为增加课程的变量p1=head;p0=(structkecheng*)malloc(sizeof(structkecheng));//p1指向第一个结点,p0指向要插入的结点printf(请输入你要增加的课程:\n);printf(课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n);scanf(%d%s%s%d%d%d%f%d,&p0-bianhao,p0-name,p0-xingzhi,&p0-zongxueshi,&p0-shoukexueshi,&p0-shangjixueshi,&p0-xuefen,&p0-kaikexueqi);while((p0-bianhaop1-bianhao)&&(p1-next!=NULL)){p2=p1;//使p2指向刚才p1指向的结点p1=p1-next;//p1后移一个结点}if(p0-bianhao=p1-bianhao){if(head==p1)head=p0;//将增加课程的地址插到原来第一个结点之前elsep2-next=p0;//插到p2指向的结点之后p0-next=p1;}else{p1-next=p0;p0-next=NULL;//插到最后的结点之后}n=n+1;//结点数加1save(head);return(head);}structkecheng*write(){FILE*fp;structkecheng*head,*p1,*p2;//fp=fopen(所有课程信息.txt,r);if((fp=fopen(所有课程信息.txt,r))==NULL){printf(nodatapleaseinputsourcedata\n);head=creat();//head=creat();//returnNULL;}//把文件中的信息写入一个链表p1=p2=(structkecheng*)malloc(sizeof(structkecheng));fscanf(fp,%d,&p1-bianhao);head=NULL;while(!feof(fp)){fscanf(fp,%s%s%d%d%d%f%d,p1-name,p1-xingzhi,&p1-zongxueshi,&p1-shoukexueshi,&p1-shangjixueshi,&p1-xuefen,&p1-kaikexueqi);n++;if(n==1)head=p1;elsep2-next=p1;p2=p1;p1=(structkecheng*)malloc(sizeof(structkecheng));fscanf(fp,%d,&p1-bianhao);}p2-next=NULL;ret
本文标题:c语言程序设计之学生选修课系统设计代码
链接地址:https://www.777doc.com/doc-6379997 .html