学生选修课程C语言系统设计学生选修课管理系统.doc
《学生选修课程C语言系统设计学生选修课管理系统.doc》由会员分享,可在线阅读,更多相关《学生选修课程C语言系统设计学生选修课管理系统.doc(21页珍藏版)》请在咨信网上搜索。
《高级语言程序设计》 题 目:学生选修课管理系统 目录 1. ..........................................题目说明 2. .....................................数据结构设计 3. .....................................系统大纲 4. .....................................模块设计 5. .....................................程序代码 6. .....................................运行结果 7. .....................................小结 学生选修课管理系统 假定有n门课程,,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课.试设计一选修课程系统,使之能提供一下功能: (1) 系统以菜单方式工作; (2) 课程信息和学生信息的录入功能(课程信息有文件保 存)----输入; (3) 课程信息浏览功能----输出; (4) 查询功能(至少一种查询方式)---算法; (5) 按学分查询; (6) 某门课程学生选修情况(可选项). 二:数据结构设计 本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这种数据结构. 三:系统大纲学生菜单 管理员菜单 主 菜 单 浏览课程 浏览我选修的课程 删除错选的课程 选择选修课程 查询课程信息 浏览所有课程 删除课程 添加课程 查询课程 四:模块设计 (一) 主函数,头文件及结构体声明 主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块 [程序] #include "stdio.h" #include "string.h" #include "stdlib.h" #include"malloc.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 *head=NULL; int main() { int n,w=1; do { system("cls"); puts("\n\n\t\t*****************MENU******************\n\n"); puts("\t\t\t\t1.以管理员身份登录\n"); puts("\t\t\t\t2.以学生身份登录\n"); puts("\t\t\t\t3.退出"); puts("\n\n\t\t*******************************************\n"); printf("Chiose your number(1-3):[ ]\b\b"); scanf("%d",&n); switch(n) { case 1:Mangers() ;break; case 2:Students();break; case 3:w=0;break; default:; } } while(w==1); return 0; } (二) 管理员功能模块 管理员的功能一共有四个功能:浏览,查询,添加,删除课程.运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用. [程序] void Mangers() //管理员登录菜单 { int n,w=1,flag=0,i=3; char s[8]; char password[7]="123456"; do { printf("\n\nEnter password:"); scanf("%s",s); if(!strcmp(s,password)) //进行密码匹配验证 { flag=1; break; } else { printf("\n\nError! You only have %d times! Enter again:\n",i-1); i--; } } while(i>0); if(!flag) { printf("you have Enter 3 times!"); //输入密码超过了3次!! exit(0); //自动退出 } do { system("cls"); puts("\n\n\t\t**************管理员菜单*******************\n\n"); puts("\t\t\t\t1---浏览课程\n"); puts("\t\t\t\t2---查询课程\n"); puts("\t\t\t\t3---添加课程\n"); puts("\t\t\t\t4---删除课程\n"); puts("\t\t\t\t5---返回主菜单"); puts("\n\n\t\t***********************************************\n"); printf("Chiose your number(1-5):[ ]\b\b"); scanf("%d",&n); switch(n) { case 1:insert();savefile();break; case 2:prin();break; case 3:search();break; case 4:del();savefile();break; case 5:return; default:; } } while(w==1); } (三) 学生功能菜单 学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数 [程序] void Students() //学生登录菜单 { int n,w=1; do { system("cls"); puts("\n\n\t\t************学生菜单**************\n\n"); puts("\t\t\t\t1---浏览所有课程\n"); puts("\t\t\t\t2---查询课程信息\n"); puts("\t\t\t\t3---选择选修课程\n"); puts("\t\t\t\t4---浏览我选修的课程\n"); puts("\t\t\t\t5---删除错选课程\n"); puts("\t\t\t\t6---返回主菜单"); puts("\n\n\t\t***********************************\n"); printf("Chiose your number(1-6):[ ]\b\b"); scanf("%d",&n); switch(n) { case 1:prin();break; case 2:search();break; case 3:choose();break; case 4:prin();break; case 5:del();savefile1();break; case 6:return; default:; } } while(w==1); } (四) 创建链表模块 [程序] 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; } (五) 浏览模块 浏览模块主要用管理员中的”浏览课程”和学生功能中的”浏览所有所有课程”,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出 [程序] void prin() //浏览所有课程 { SUB *ptr; head=NULL; readfile(); if(head==NULL) { printf("\n\n\t*********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); } system("pause"); } (六) 查询模块 查询模块主要用于管理员功能中的”查询课程”和学生功能模块中的”查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找.switch语句中,每一个case语句就是一中查询方法 [程序] void search() //课程信息查询 { int a,num; int t=1; char type[10],min[10]; SUB *ptr; L1:system("cls"); printf("\n\n\t\t**********请选择查询方式*************\n"); printf("\n\t\t\t1---按课程名称查找\n"); printf("\n\t\t\t2---按课程性质查找\n"); printf("\n\t\t\t3---按学分查找\n"); printf("\n\t\t\t4---退出查找\n"); printf("\n\n\t\t**************************************\n"); printf("\n\nChiose your number(1-4):[ ]\b\b"); scanf("%d",&a); switch(a) { case 1:printf("请输入要查找的课程的名称:"); //按课程名称查找scanf("%s",min); printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); for(ptr=head;ptr;ptr=ptr->next) if(strcmp(min,ptr->name)==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("\t\n未找到!\n"); t=1; system("pause"); goto L1; case 2:printf("请输入要查找的课程的性质:"); //按课程性质查找 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("\t\n未找到!\n"); t=1; system("pause"); goto L1; case 3:printf("输入要查找的课程的学分:"); //按学分查找 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未找到!\n"); t=1; system("pause"); goto L1; case 4:break; //退出查找 } } (七) 插入链表模块 插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用 [程序] void *myInsert(SUB* subj) //链表插入操作 { SUB *p1,*p2; p1=subj; if(head==NULL) { head=p1; head->next=NULL; } else { for(p2=head;p2;p2=p2->next) if(p2->next==NULL) { p2->next=subj; subj->next=NULL; break; } } eturn head; } (八) 添加模块 添加模块主要用于增加课程信息,采用链表的操作 [程序] void *insert() //插入课程信息 { SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; while(ch!='0') { subj=(SUB *)malloc(size); ptr=subj; printf("输入要插入的课程信息:\n"); printf("\n\t\t请输入课程编号:");scanf("%d",&subj->num); printf("\n\t\t请输入课程名称:");scanf("%s",&subj->name); printf("\n\t\t请输入课程性质:");scanf("%s",&subj->kind); printf("\n\t\t请输入总学时:");scanf("%d",&subj->stime); printf("\n\t\t请输入授课学时:");scanf("%d",&subj->ttime); printf("\n\t\t请输入实践或上机学时:"); scanf("%d",&subj->etime); printf("\n\t\t请输入学分:");scanf("%d",&subj->score); printf("\n\t\t请输入开课学期:");scanf("%d",&subj->term); myInsert(subj); printf("\n\n继续插入请按回车\n"); printf("\n结束添加课程按 0: [ ]\b\b"); ch1=getchar(); /*将回车键赋给CH1,否则subj->term输完后输入的回车键会赋给CH,因此用CH1填补。*/ ch=getchar(); } return head; } (九) 删除模块 删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作 [程序] void *del() //删除课程- { SUB *p1,*p2; char ch,ch1; int num; while(ch!='0') { printf("输入想要删除的课程编号:[ ]\b\b\b\b\b"); 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; } printf("\n继续删除请按回车\n"); printf("\n结束删除课程按 0: [ ]\b\b"); ch1=getchar(); //将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。 ch=getchar(); } return head; system("pause"); } (十) 选修课程模块 选修课程模块采用插入链表的操作, [程序] void choose() //选新课程 { SUB *p,*q; int a[5]; int num,total=0,i=0,j; printf("输入要选修的课程的编号,编号之间以空格分开\n"); scanf("%d",&num); printf("如果确认输入完要选修的课程的编号,请输入0: [ ]\b\b"); 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("选修总学分为%d,未达到60,选修失败!\n",total); system("pause"); } else { FILE *fp; fp=fopen("my_sub.txt","w"); fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); for(j=0;j<i;j++) for(q=head;q;q=q->next) if(q->num==a[j]) fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); fclose(fp); printf("\t\t\n*****选修成功!****\n"); printf("\n您选修的课程总学分为%d,课程分别为:\n",total); printf("\n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\n"); for(j=0;j<i;j++) for(q=head;q;q=q->next) if(q->num==a[j]) printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); printf("\n以上信息全部保存在'my_sub.txt'中\n"); } system("pause"); } (十一) 读取文件模块 读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_sub.txt时,就是浏览学生选修的课程信息 [程序] void readfile() //阅读文件 { void *myInsert(SUB*); SUB *newSub; int num,stime,ttime,etime; int score,term; char c,name[20],kind[10],fname[20]; printf("请输入课程信息所在的文件名称:"); scanf("%s",fname); FILE *fp; fp=fopen(fname,"r"); while(!feof(fp)) { if((c=fgetc(fp))=='\n') break; } while(!feof(fp)) { newSub=(SUB*)malloc(sizeof(SUB)); fscanf(fp,"%d%s%s%d%d%d%d%d\n",&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term); myInsert(newSub); } fclose(fp); } (十二) 保存文件模块 保存文件模块共分为两个子程序,分别是将修改的信息保存到all_sub.txt和my_sub.txt文件中. [程序] void savefile() //保存文件(一) { SUB *p; FILE *fp; fp=fopen("all_sub.txt","w"); if(fp==NULL)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->ttime,p->etime,p->score,p->term); fclose(fp); printf("创建后的信息已放入'all_sub.txt'文件中\n"); system("pause"); } void savefile1() //保存文件(二) { SUB *p; FILE *fp; fp=fopen("my_sub.txt","w"); if(fp==NULL)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->ttime,p->etime,p->score,p->term); fclose(fp); printf("创建后的信息已放入'my_sub.txt'文件中\n"); system("pause"); } : 5.程序代码 #include "stdio.h" #include "string.h" #include "stdlib.h" #include"malloc.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 *head=NULL; 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 *p; FILE *fp; fp=fopen("1","w"); if(fp==NULL)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->ttime,p->etime,p->score,p->term); fclose(fp); printf("恭喜,课程修改成功\n"); system("pause"); } void *myInsert(SUB* subj) /* 链表插入操作*/ { SUB *p1,*p2; p1=subj; if(head==NULL) { head=p1; head->next=NULL; } else { for(p2=head;p2;p2=p2->next) if(p2->next==NULL) { p2->next=subj; subj->next=NULL; break; } } return head; } void savefile1() /* 保存文件二 */ { SUB *p; FILE *fp; fp=fopen("2","w"); if(fp==NULL)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->ttime,p->etime,p->score,p->term); fclose(fp); system("pause"); } void readfile() /* 阅读文件? */ { FILE *fp; void *myInsert(SUB*); SUB *newSub; char c,fname[20]; scanf("%s",fname); fp=fopen(fname,"r"); while(!feof(fp)) { if((c=fgetc(fp))==- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 选修 课程 语言 系统 设计 选修课 管理
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文