C++课程设计 学生选修课程系统设计(限最多3人)

选课程 浏览

#include #include #include #include #include int n=0; //n为结点个数 struct kecheng //声明结构体 { int bianhao; char name[10]; char xingzhi[10]; int zongxueshi; int shoukexueshi; int shangjixueshi; float xuefen; int kaikexueqi; struct kecheng *next; }; struct kecheng *head; struct kecheng *creat() //创建链表.此函数带回一个指向链表头的指针 { void save(struct kecheng *head); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n); struct kecheng *head,*p1,*p2; p1=p2=(struct kecheng *) malloc(sizeof (struct kecheng)); //开辟一个新单元 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; else p2->next=p1; p2=p1; p1=(struct kecheng *)malloc(sizeof (struct kecheng)); scanf(%d,&p1->bianhao); } p2->next=NULL; save(head); return(head); } void save(struct kecheng *head) //保存到文件中 { struct kecheng *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); } void chakan(struct kecheng *head) //查看所有课程信息,即可以选的课程 { struct kecheng *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; } } void search(struct kecheng *head) //按编号或性质查询 { int a,bianhao; //a为对菜单进行选择的变量 int flag=1; //flag为判断是否找到该课程 char xingzhi[10]; struct kecheng *p; printf(若要按课程性质查找请输入1\n); printf(若要按课程编号查找请输入2\n); printf(退出查询请按0\n); scanf(%d,&a); while(a!=0) { switch(a) { case 1: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; case 2: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); } } void xuanke(struct kecheng *head) //学生按编号选课 { FILE *fp; fp=fopen(学生已选课.txt,w); int bianhao,i=0,j,a[20]; //数组a中存放已选好的课程 struct kecheng *p; float s=0; //s为统计所选课程的学分 printf(请输入你想选的课程编号,以0结束:\n); scanf(%d,&bianhao); while(bianhao!=0) { for(j=0;jbianhao) p=p->next; else break; } 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(s<60) printf(选课失败\n); else printf(选课成功\n); } struct kecheng *del(struct kecheng *head) //删除一门课程 { int m; //m为想删除课程的编号 struct kecheng *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 指向的是首结点,把第二个结点地址赋给head head=p1->next; //否则将下一结点地址赋给前一结点地址 else p2->next=p1->next; n=n-1; } else printf(找不到你要删除的课程!\n); scanf(%d,&m); } save(head); return(head); } struct kecheng *insert(struct kecheng *head) //增加一门课程的函数 { struct kecheng *p0,*p1,*p2; //insert_kc为增加课程的变量 p1=head;p0=(struct kecheng *)malloc(sizeof (struct kecheng)); //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->bianhao>p1->bianhao)&&(p1->next!=NULL)) { p2=p1; //使p2指向刚才p1指向的结点 p1=p1->next; //p1后移一个结点 } if(p0->bianhao<=p1->bianhao) { if(head==p1) head=p0; //将增加课程的地址插到原来第一个结点之前 else p2->next=p0; //插到p2指向的结点之后 p0->next=p1; } else { p1->next=p0;p0->next=NULL; // 插到最后的结点之后 } n=n+1; //结点数加1 save(head); return(head); } struct kecheng *write() { FILE *fp; struct kecheng *head,*p1,*p2; // fp=fopen(所有课程信息.txt,r); if((fp=fopen(所有课程信息.txt,r))==NULL ) { printf(no data please input source data\n); head=creat(); //head=creat(); //return NULL; } //把文件中的信息写入一个链表 p1=p2=(struct kecheng *) malloc(sizeof (struct kecheng)); 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; else p2->next=p1; p2=p1; p1=(struct kecheng *)malloc(sizeof (struct kecheng)); fscanf(fp,%d,&p1->bianhao); } p2->next=NULL; return head; } void yixuan() { FILE *fp;struct kecheng a[20]; int i=0,j; fp=fopen(学生已选课.txt,r); while(!feof(fp)) { fscanf(fp,%d%s%s%d%d%d%f%d\n,&a[i].bianhao,a[i].name,a[i].xingzhi,&a[i].zongxueshi,&a[i].shoukexueshi,&a[i].shangjixueshi,&a[i].xuefen,&a[i].kaikexueqi); i++; } fclose(fp); printf(课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n); for(j=0;j=3) //密码错误超过三次退出系统 { printf(对不起,密码错误超过三次!\n); exit(0); } } void student_welcome() //欢迎学生的菜单 { char c=2; printf( %c要查看所有的课程信息请按1\n,c); printf( %c要查询你想选的课程请按2\n,c); printf( %c要选修课程请按3\n,c); printf( %c要查看已选课程请按4\n,c); printf( %c要退出系统请按0\n,c); } void main() { int m;char c=2; head=write(); welcome(); scanf(%d,&m); if(m==1) //管理员登入后的菜单 { teacher_welcome(); scanf(%d,&m); while(m!=0) { switch(m) { case 1:head=creat();break; //调用输入函数 case 2:chakan(head);break; // 调用查看函数 case 3:head=del(head);break; // 调用删除函数 case 4:head=insert(head);break; // 调用增加函数 case 0:break; } printf( %c要输入课程信息请按1\n,c); printf( %c要查看所有的课程信息请按2\n,c); printf( %c要删除一门课程请按3\n,c); printf( %c要增加一门课程请按4\n,c); printf( %c要退出系统请按0\n,c); scanf(%d,&m); } } else //学生登入后的菜单 { student_welcome(); scanf(%d,&m); while(m!=0) { switch(m) { case 1:chakan(head);break; // 调用查看函数 case 2:search(head);break; //调用查询函数 case 3:xuanke(head);break; // 调用选课函数 case 4:yixuan();break; //调用查看已选课程的函数 case 0:break; } student_welcome(); scanf(%d,&m); } } };j++)>;j++)>

转载请注明:多米培训网 » C++课程设计 学生选修课程系统设计(限最多3人)