选修课c语言课程设计_第1页
选修课c语言课程设计_第2页
选修课c语言课程设计_第3页
选修课c语言课程设计_第4页
选修课c语言课程设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计说明书题目名称: 学生选修课程系统设计系部:专业班级:学生姓名: 学号: 指导教师: 完成日期:2019年6月26日设计题目 学生选修课程系统设计 系部 专业班级学生姓名 评定意见:学生学号评定成绩:指导教师(签名):2019年6月日

新疆工程学院课程设计任务书2018-2019学年下学期2019年6月24日专业班级课程名称C语言程序设计设计题目学生选修课程系统设计指导教师起止时间2019.6.24-2019.6.28 周数1设计地点设计目的:巩固和加深学生C语言程序设计课程的基本知识的理解和掌握掌握C语言程序设计编程和程序调试的基本技能利用C语言程序设计进行基本的程序设计掌握书写程序设计说明文档的能力设计任务或主要技术指标:分析课程设计题目的要求写出详细设计说明编写程序代码,调试程序使其能正确运行设计完成的程序要能够解决问题并便于操作和使用设计完成后提交课程设计报告设计进度与要求::阅读理解设计题目,查找资料,理解掌握设计题目需要的知识点:写出项目分析概要;项目详细设计6.26:编写调试程序6.27:写课程设计报告,指导老师核查程序运行结果、审核报告。学生查缺补漏,修改报告,通过后打印设计报告。6.28:答辩交报告。主要参考书及参考资料:1、 教材:吴军良《C语言课程设计》上海交通大学出版社2018年2月出版2、 参考书:田淑清《全国计算机等级考试二级教程.C语言程序设计》高等教育出版社2015年11月出版教研室主任(签名)系(部)主任(签名)摘要学生选修课系统用于学生课程的查询,选择。系统可以准确的记录和查询学生、老师以及所开设的课程的基本信息,学生登录系统后可以根据本专业制定的教学计划进行选课操作,查询课程的基本信息。系统的主要功能包括:课程信息和学生信息的录入功能,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息(数据保存生成文件),课程信息浏览功能,调用所生成的文件;查询功能,根据课程名称、性质、学分查询;按学分查询某门课程学生选修情况,如所选的课程学分小于60则选修课程失败。关键词:学生选修课系统;查询;浏览;选择TOC\o"1-5"\h\z1题目及要求 1\o"CurrentDocument"1.1目的 1\o"CurrentDocument"1.2设计要求 1\o"CurrentDocument"1.3设计功能 12详细设计 23.编码与实现 164程序分析 19总结 20\o"CurrentDocument"参考文献 211题目及要求1.1目的1) 利用计算机能够进行信息管理,使用计算机进行信息控制,提高了工作效率,而且大大的提高了其安全性2) 对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好学生选课信息而设计的。3) 数据处理手工操作,工作量大,出错率高,出错后不易更改,造成了时间上的浪费。基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。1.2设计要求假定有n门课程,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。设计系统,使之能提供以下功能:系统以菜单方式工作;课程信息和学生信息的录入功能(课程信息有文件保存);课程信息浏览功能;查询功能:至少一种查询方式,按学分查询某门课程学生选修情况。1.3设计功能本程序是学生选修课系统,有两种模块,分别为管理员模块和学生模块。管理员模式包括课程信息和学生信息的录入功能和浏览,查询,添加,删除课程运用字符串处理函数处理密码的功能,学生模块包括六个功能浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程

2详细设计本系统主要分为管理员模块和学生模块,各模块功能如图1所示。上添加课程删除课程土游览所有课程i查询课程信息上添加课程删除课程土游览所有课程i查询课程信息图1系统功能本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找、添加、删除、课程的选修、追加选修的课程,课程信息采用结构体这种数据结构。核心代码typedefstructsubjectsintnum;〃课程编号charname[20];〃课程名称charkind[10];〃课程性质intstime;//总学时intttime;〃授课学时intetime;//实验或上机学时intscore;//学分intterm;〃开课学期structsubjects*next;}SUB;SUB*head=NULL;intmain()intn,w=1;dosystem("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("Chioseyournumber(1-3):[]\b\b");scanf("%d",&n);switch(n)case1:Mangers();break;case2:Students();break;case3:w=0;break;default:;}}while(w==1);return0;}2.1主函数,头文件及结构体声明主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块:核心代码:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"malloc.h”voidprin1();voidchoose();typedefstructsubjects〃课程结构体{intnum;〃课程编号charname[20];〃课程名称charkind[10];〃课程性质intstime;//总学时intttime;〃授课学时intetime;//实验或上机学时intscore;//学分intterm;structsubjects*next;}SUB;〃开课学期SUB*head=NULL;intmain()(intn,w=1;dosystem("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("Chioseyournumber(1-3):[]\b\b");scanf("%d",&n);switch(n)(case1:Mangers();break;case2:Students();break;case3:w=0;break;default:;}}while(w==1);return0;}2.2学生功能菜单学生功能菜单功能主要包括浏览课程,选择选修课,浏览我所选修的课程,删除错选的课程,返回主菜单,如图2所示。(学生登录/ + 按1-6数字键进入各选项1、 浏览所有课程2、 查询课程信息3、 选择选修课程4、 浏览我选修的课程5、 删除错选课程6、 返回主菜单进入所选目标图2学生登录菜单核心代码:voidStudents() //学生登录菜单(intn,w=1;do(system("cls");putsC'\n\n\t\t,,,,,,,,学生菜单SSS\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("Chioseyournumber(1-6):[]\b\b");scanf("%d",&n);switch(n)(case1:prin();break;case2:search();break;case3:choose();break;case4:prin1();break;case5:del();savefile1();break;case6:return;default:;}}while(w==1);}2.3创建链表模块选修课信息录入,运用int,char函数。主要函数:SUB*create_form() 〃创建链表(SUB*head,*tail,*p;intnum,stime,ttime;intetime,score,term;charname[20],kind[10];intsize=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;elsetail->next=p;tail=p;scanf("%d%s%s%d%d%d%d%d",&num,name,kind,&stime,&ttime,&etime,&score,&term);}tail->next=NULL;returnhead;}2.4查询模块//课程信息查询//课程信息查询voidsearch()inta,num;intt=1;chartype[10],min[10];SUB*ptr;L1:system("cls");printf("\n\n\t\t・・・・・・・・请选择查询方式PSSSP\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\W””・”””””・””\n");printf("\n\nChioseyournumber(1-4):[]\b\b");scanf("%d",&a);switch(a)(case1: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");gotoL1;case2: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");gotoL1;case3: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");gotoL1;case4:break;}}t=0;}if(t)printf("\n\t未找到!\n");t=1;system("pause");gotoL1;case4:break; //退出查找}

图3链表模块2.5选修模块此模块是用于学生选修课,运用if-else语句判断所选修的课程总学分是否达到60分,如果达到60分则选修成功,所选课的信息存入文件中;否则则选修失败。voidchoose()//选新课程--学生选课函数(SUB*p,*q;inta[5];intnum,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("3.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您选修的课程总学分为%1课程分别为:\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以上信息全部保存在'3.txt'中\n");}system("pause");}voidprin1() 〃浏览所有选修课程(SUB*ptr;FILE*fp;if((fp=fopen("3.txt","r"))==NULL)(printf("Cannotopenfile.\n");choose();}printf(-课程编号课程名称课程性质总学时授课学时实践或上机学时学分开课学期\n");while(!feof(fp))(ptr=(SUB*)malloc(sizeof(SUB));fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,&ptr->ttime,&ptr->etime,&ptr->score,&ptr->term);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");}2.6删除选课模块此模块用于学生删除错选的选修课成,删除后生成新的课程信息存入文件中。void*del()〃删除课程(SUB*p1,*p2;charch,ch1;intnum;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)returnNULL;p1=head;p2=head->next;while(p2)if(p2->num==num)(p1->next=p2->next;free(p2);}elsep1=p2;p2=p1->next;}printf("\n继续删除请按回车\n");printf("\n结束删除课程按0:[]\b\b");ch1=getchar(); //将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();printf("\n删除完毕,新信息存入文件中\n");system("pause");}returnhead;system("pause");}

3.编码与实现学生功能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程。开始运行界面可选择登录号身份,以管理员身份登录和以学生身份登录。开始运行界面如图4.1所示图4.1开始运行学生界面共有六个功能,其中包括游览所有课程、查询课程信息、选择选修课程、浏览我选修的课程、删除错选课程五个功能,还包括返回主菜单功能。学生界面如图4.2所示图4.2学生界面

学生选课模块依靠课程编号进行选课,输入编号需用空格隔开,结束选课课程按0后进行保存。学生选课模块如图4.6所示,TiVDoctimentsand部侦时网血丽肘而心薄面山血航跑映&血" =|口x|45-删除错选课程卜一逅回主菜单ChiDseyrauipnLunJbe1-6:[3]仙「、兵远既U程ER号.缶七二>=.上工专中厂]孟扁,,.馈:'『史i眼渺平浒弟己•=馈七:[03*****.,■您选建的谋程总学分为也虬课程分划知咪程编号谭程名稼课程性质总学时授课舸实践或上机字时,———一—学分开课学期1 Fifths 3bx 14 122012 history 3bx 15 125013 niL^ic xx 20 1554@1J二信息W晋■保住=请苍任蔷盛跄…图4.3选课模块学生浏览模块依靠学生菜单功能4进入,可游览课程编号、课程名称、课程性质、总学时、授课学时、实践或上机学时、学分、开课学期。学生浏览模块界面如图4.4所示图4.4学生浏览模块学生查询模块主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,学生查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找。查询模块如图4.5所示

吸C:\Documetilsand&etllno8\Admlni就mEor\吏面\Debuo\Enwye5jexB1—I制半仁-三件:古松吸C:\Documetilsand&etllno8\Admlni就mEor\吏面\Debuo\Enwye5jexB1—I制半仁-三件:古松,一按学分查找■■■■■■■■■■■■■4—退出查找的携W"讣15Nd授课学时实践或上机学时1Z 0Z0 0学分开深割5。 1&H 1图4.5学生查询模块学生删除模块依靠课程编号进行删除,输入编号后回车确认删除课程,结束删除课程按0后进行保存。学生删除模块如图4.6所示S3匚涪.iDi□匚uments日mdSettin讲、内时佰面面^就皿、.桌山做样1-浏我亍百决程S3匚涪.iDi□匚uments日mdSettin讲、内时佰面面^就皿、.桌山做样1-浏我亍百决程2—A'n?Mza.^.―一+末•.荷任浓程4—浏也我奇廖拧LW?—,•iFt:hios@vdlii*number-Cl-6>;[5)靳入想要略的堞程编号;牡]站庄力应'课程挨a=rfii•舞邀麟F"土E图4.6学生删除模块4程序分析在程序测试中,我们首先对各个子模块进行单元测试,即把每一个模块作为一个单独的实体来测试,保证每个模块作为一个单元能正确运行。然后在完成所有模块后,我们将各子模块集成起来,再对它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论