logo资料库

学生选修课管理系统C语言课程设计.doc

第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
资料共9页,剩余部分请下载后查看
#include "stdio.h" #include "stdlib.h" #include "string.h" #include "process.h" typedef struct subjects { int num; char name[20]; char kind[10]; int stime; int ttime; int etime; int score; int term; struct subjects *next; }SUB; //总学时 //授课学时 //实验或上机学时 //学分 //开课学期 //课程编号 //课程名称 //课程性质 //创建链表 SUB *create_form() { SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name[20],kind[10]; int size=sizeof(SUB); head=tail=NULL; printf("输入选修课程信息:\n"); scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term); while(num!=0){ p=(SUB *)malloc(size); p->num=num; strcpy(p->name,name); strcpy(p->kind,kind); p->stime=stime; p->ttime=ttime; p->etime=etime; p->score=score; p->term=term; if(head==NULL) head=p; else tail->next=p; tail=p; scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term); }
tail->next=NULL; return head; } //将建立的链表存入文件 void savefile(SUB *head) { SUB *p; FILE *fp; if((fp=fopen("e:\\subjects.txt","w"))==NULL){ printf("open fail!\n"); exit(0); } fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开 课学期\n"); for(p=head;p;p=p->next) fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->tti me,p->etime,p->score,p->term); if(fclose(fp)){ printf("close fail!\n"); exit(0); } printf("创建后的信息已放入 E 盘根目录的“subjects.txt”文件中\n"); } //将修改后的信息存入新文件 void savefileadd(SUB *head) { SUB *p; FILE *fp; if((fp=fopen("e:\\subjectsadd.txt","w"))==NULL){ printf("open fail!\n"); exit(0); } fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开 课学期\n"); for(p=head;p;p=p->next) fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->tti me,p->etime,p->score,p->term); if(fclose(fp)){ printf("close fail!\n"); exit(0); } printf("修改后的信息已放入 E 盘根目录的“subjectsadd.txt”文件中\n"); }
// 将再次修改的信息存入新文件 void savefiledel(SUB *head) { SUB *p; FILE *fp; if((fp=fopen("e:\\subjectsdel.txt","w"))==NULL){ printf("open fail\n"); exit(0); } fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开 课学期\n"); for(p=head;p;p=p->next) fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->tti me,p->etime,p->score,p->term); if(fclose(fp)){ printf("close fail!\n"); exit(0); } printf("修改后的信息已放入 E 盘根目录的“subjectsdel.txt”文件中\n"); } //输出信息 void prin(SUB *head) { SUB *ptr; if(head==NULL){ printf("NO RECORDS!\n"); return; } printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学 期\n"); for(ptr=head;ptr;ptr=ptr->next) printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr- >ttime,ptr->etime,ptr->score,ptr->term); } //查询信息 void search(SUB *head) { int a,num; int t=1; char type[10]; char ch='a',ch1; SUB *ptr; while(ch!=' '){ printf("若要按课程性质查找请输入 1,若要按学分查找请输入 2:\n");
scanf("%d",&a); switch(a){ case 1:printf("请输入要查找的课程的性质:\n"); scanf("%s",type); printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课 学期\n"); for(ptr=head;ptr;ptr=ptr->next) if(strcmp(type,ptr->kind)==0){ printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr ->ttime,ptr->etime,ptr->score,ptr->term); t=0; } if(t) printf("未找到!\n"); t=1; break; case 2:printf("输入要查找的课程的学分\n"); scanf("%d",&num); printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课 学期\n"); for(ptr=head;ptr;ptr=ptr->next) if(ptr->score==num){ printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr ->ttime,ptr->etime,ptr->score,ptr->term); t=0; } if(t) printf("未找到!\n"); t=1; } printf("继续查找请按回车键,结束请按空格键:\n"); ch1=getchar(); 赋给 CH,因此用 CH1 填补。 ch=getchar(); } } //将回车键赋给 CH1,否则 CASE 里面最后输入的回车键会 //插入信息 SUB *insert(SUB *head) { SUB *ptr,*ptr2,*subj; int size=sizeof(SUB); char ch='a',ch1; while(ch!=' '){ subj=(SUB *)malloc(size);
ptr=subj; printf("输入要插入的课程信息:\n"); scanf("%d%s%s%d%d%d%d%d",&subj->num,subj->name,subj->kind,&subj->stime,&subj- >ttime,&subj->etime,&subj->score,&subj->term); if(head==NULL){ head=ptr; head->next=NULL; } else{ for(ptr2=head;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL){ ptr2->next=subj; subj->next=NULL; break; } } printf("继续插入请按回车,结束请按空格:\n"); ch1=getchar(); //将回车键赋给 CH1,否则 subj->term 输完后输入的回车键会 赋给 CH,因此用 CH1 填补。 ch=getchar(); } return head; } //删除信息 SUB *del(SUB *head) { SUB *p1,*p2; char ch='a',ch1; int num; while(ch!=' '){ printf("输入想要删除的课程编号:\n"); scanf("%d",&num); if(head->num==num){ p2=head; head=head->next; free(p2); } if(head==NULL) return NULL; p1=head;
p2=head->next; while(p2){ if(p2->num==num){ p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; //将回车键赋给 CH1,否则 num 输完后再输入的回车键会赋给 } printf("继续删除请按回车,结束请按空格:\n"); ch1=getchar(); CH,因此用 CH1 填补。 ch=getchar(); } return head; } //学生选课 void choose(SUB *head) { SUB *p,*q; int a[5]; int num,total=0,i=0,j; printf("输入要选修的课程的编号,编号之间以空格分开,输完后以 0 结束\n"); scanf("%d",&num); while(num!=0){ for(p=head;p;p=p->next) if(p->num==num){ total=total+p->score; a[i]=num; i++; } scanf("%d",&num); } if(total<60) printf("选修总学分未达到 60,选修失败!\n"); else { printf("选修成功!\n"); printf("您选修的课程为:\n"); for(j=0;jnext) if(q->num==a[j]) printf("%s ",q->name); printf("\n"); } }
void readfile() { //将第一次建立的文件重新读出 int num,stime,ttime,etime; int score,term; char c,name[20],kind[10]; FILE *fp=fopen("e:\\subjects.txt","r"); while(!feof(fp)) { if((c=fgetc(fp))=='\n') break; } printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课 学期\n"); while(!feof(fp)) { fscanf(fp,"%d%s%s%d%d%d%d%d\n",&num,name,kind,&stime,&ttime,&etime,&score,&t erm); printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",num,name,kind,stime,ttime,etime,score,te rm); } fclose(fp); } void main() { SUB *head; int i; char c; printf("\n\n"); for(i=0;i<34;i++) printf("*"); printf("课程信息录入"); for(i=0;i<34;i++) printf("*"); printf("\n\n"); head=create_form(); savefile(head); printf("\n\n"); for(i=0;i<34;i++) printf("*"); printf("课程信息输出");
for(i=0;i<34;i++) printf("*"); printf("\n\n"); prin(head); printf("\n\n"); for(i=0;i<34;i++) printf("*"); printf("课程信息查找"); for(i=0;i<34;i++) printf("*"); printf("\n\n"); search(head); printf("\n\n"); for(i=0;i<34;i++) printf("*"); printf("课程信息插入"); for(i=0;i<34;i++) printf("*"); printf("\n\n"); head=insert(head); savefileadd(head); printf("修改后的信息为:\n"); prin(head); printf("\n\n"); for(i=0;i<34;i++) printf("*"); printf("课程信息删除"); for(i=0;i<34;i++) printf("*"); printf("\n\n"); //注意此处的必要性,函数 insert 的的返回值重新赋给 head! head=del(head); savefiledel(head); printf("修改后的课程信息为:\n"); prin(head); //注意此处的必要性,函数 del 的的返回值重新赋给 head! printf("\n\n"); for(i=0;i<34;i++)
分享到:
收藏