学生选修课程系统设计_第1页
学生选修课程系统设计_第2页
学生选修课程系统设计_第3页
学生选修课程系统设计_第4页
学生选修课程系统设计_第5页
已阅读5页,还剩45页未读, 继续免费阅读

下载本文档

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

文档简介

实习报告题目: 学生选修课程系统设计学号姓名专业班级指导教师实践日期一、综合训练目的与要求综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。本课综合训练的目的和任务:巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握掌握C语言编程和程序调试的基本技能利用C语言进行基本的软件设计掌握书写程序设计说明文档的能力提高运用C语言、数据结构解决实际问题的能力二、综合训练任务实习题目:学生选修课程系统设计。题目需求:运用结构体和链表设计一个简单的选修课程管理系统,做出系统菜单,并作出管理员菜单和学生菜单两个子菜单,使之能完成管理员的对课程信息的录入、浏览、查询、添加、删除、修改与学生对选修课程的浏览、查询、选择,浏览学生已选的选修课程和删除选错的课程。、总体设计图1总体流程图设计思路:1、此程序是要写一个选修课管理系统,首先要先设计一个主菜单,在由主菜单进入进行函数调用,进行下面的操作。由于有管理员与学生两类人登陆系统,进行不同的操作,所以设计两个子菜单,以便区分管理2、由管理员先录入信息,然后管理员和学生再对录入的信息进行操作,所以必须对每个程序修改的数据进行保存,采用文件的形式,数据均保存在文件内,可以通过文件指针对文件进行读写与保存。3、用一个结构体表示一条课程信息,每个模块的具体操作时在链表里,每次操作时先将信息从文件读出存在链表,进行操作,然后再将信息写入文件。四、详细设计说明1、模块说明录入课程:Input()流程图如下:录入I课1程录入I课1程値息模块输入滦称、开学时、总学分存入文件井回理员菜单图2录入信息流程图详细说明:此模块可以使管理员通过对文件的读写完成对全部选修课程的基本信息(包括课程号,课程名称,开课学院,总学时,总学分,开课学期)的一次性录入,以便进行以后的操作。其中,课程号定义为整型,开课名称和开课学院定义为20个字节的字符型,总学时、总学分和开课学期定义为整型。此函数没有返回值,将录入的选修课程信息存入一个文件内。B、浏览课程prin(),prin2()L*课程信息模块L*图3浏览课程流程图详细说明:使管理员和学生能浏览到管理员已录入的所有选课信息,此模块用到了文件操作的读出功能。此函数也没返回值,若操作完成,能返回上一级菜单;C、查询课程search(),search1()图4 查询课程流程图详细说明:此模块有两种查询方式,第一是按课程名查找,第二是按学分查找,它是通过循环进行推移查找的,若找到,这显示该选修课程的全部信息,否者,则显示未找到,以便给以提示。此模块可以实现对课程信息的查询,只要中输入课程号或某课程的学分,就可以查询到该课程的相关信息。先输入 1或2选择查找方式,然后再输入字符型的课程名或整型的学分即可查找。 管理员和学生均能通过此程序查询,本程序用到文件的读出功能。操作完成,返回到上一级菜单。D添加课程Insert()图5 添加课程流程图详细说明:将一个课程的所有信息都录入,程序会先打开相应文件,运用文件文件写追加的方式打开,再将新增的课程信息写入文件并保存。此函数没返回值,输入的课程号、总学时、总学分、开课学期都是整型,课程名和开课学院是字符型。操作完成后,回到上一级菜单。E、删除课程del()del1()流程图如下:图6删除课程流程图详细说明:此程序是完成管理员对课程信息的删除和学生对自己错选的课程信息的删除的操作。只要输入要删除的课程号,系统便利用循环推移查找到要删除的课程号,将此条课程信息删除。并将剩余的课程信息通过文件信息保存在文件内,此程序仅需输入一个整型的课程号,没有返回值。运用到了文件的读写功能。操作完成后,回到上一级菜单。F、修改课程modify()流程图如下:图7修改课程流程图详细说明:此程序完成的是管理员对选修课程的修改,若某一个课程的总学时、总学分或开课学院出现错误,可以通过此程序修改。此程序没有返回值。输入一个整型的课程号,程序就会查找到该条课程信息,再输入一个整型序号,选择要修改的项目,再输入实际的整型数据,便可完成对信息的修改。修改之后,将显示新的课程信息,并将新的课程信息通过文件指针写入文件内保存。操作完成后,返回管理员菜单。G选择课程choose(()流程图如下:

图8选择课程流程图详细说明:此程序执行的是使学生选择自己所需要的选修课程。没有返回值。输入一个整型的课程号,程序通过循环查找到该课程号,并将该课程号对应的课程信息通过文件指针写入另一个文件内保存,并将信息显示出来。操作完成后,返回学生菜单。H、浏览所选信息prin()l流程图如下:图9浏览选课信息流程图详细说明:此程序是通过文件指针打开文件已有的学生选课信息文件,将文件内的信息写入链表,然后显示出来。此程序没返回值。操作完成后,返回到上-级菜单五、调试与测试1、初始界面:jtjcjtxinJtxit■KitJCMzgtjL卩 j]先 多丘・lot嶽ititxiotjcit■iti.aws员身份登录烈以学生身份登录?.退出ber<l-3>:LJ图10初始界面2,选择1,输入并输入密码,进入管理员的界面如下:图11管理员菜单3•选择1根据提示录入课程信息,再返回管理员菜单。 再选择2,进入浏览,图示如下:4,从管理员菜单选择3,进入查询:例如按照学分查找:输入2;构学

构学

结的总学时50总学分… 4总学时50总学分… 4操作完成,校任意犍回到上一级菜单**************开课学期!2:图14查询界面添加课程与录入课程相似请输入选修课程信息:nunt:13riND住:微注牛卯学hinstituce:生命学院stine:30score:4term:10是否继续输入数据SI1图15添加界面删除课程;输入想要删除的课程号码,3,即可完成删除操作图16删除课程修改课程,! 2英悟 外语系严矗驟课予! 2英悟 外语系严矗驟课予?央语魁院总学分开课学期;60 6 1 :50 5 2 :总学时总学分开课学期i50 5 2 :择修改的信息1.总普时2-勢分开课学期实际的总学分为詞.图17修改课程输入想要修好的课程号码2,再输入要修改的类型,再输入要修改的数值即可。8,从学生身份登录以后,可以选择浏览全部,或者按照学分和选修课程编号来进行查询开开课学期;2!50:管聽称.. ”沪臂分Kim"""""*操作元成,按任意犍回到上_级菜单"""mm"图19选择课程界面先输入要选择的课程号,然后会弹出是否确定所选的课程,确定就输入 0,否则则继续进入选择课程界面;图20 浏览已选课程11,删除误选的课程,然后再输入误选编号,即可;腎号翳称鵝院请输入想要删除的错选的课程号;总学时总学分开课学期i50 4 2 !八、附录:核心代码清单//123.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"stdio.h"#include"string.h"#include"malloc.h"#include"stdlib.h"#include"conio.h"voidmenu();voidStudents();voidMangers();structSubjects{intnum;charname[20];charinstitute[20];intstime;intscore;intterm;structSubjects*next;};voidinput()//录入学生信息{system("cls");Subjects*p;Subjects*l=NULL;FILE*fp;intx;if((fp=fopen("Subjects.txt","w"))==NULL){printf("can'topenfile\n");return;do{p=(Subjects*)malloc(sizeof(Subjects));printf("\n请输入课程号:");scanf("%d",&x);p->num=x;flushall();printf("\n请输入课程名:");scanf("%s",p->name);flushall();printf("\n请输入开课学院:");scanf("%s",p->institute);flushall();printf("\n请输入总学时:");scanf("%d",&x);p->stime=x;flushall();printf("\n请输入总学分:");scanf("%d",&x);p->score=x;flushall();printf("\n请输入开课学期:");scanf("%d",&x);p->term=x;flushall();p->next=NULL;l=p;fprintf(fp,"%d",p->num);fprintf(fp,"%s",p->name);fprintf(fp,"%s",p->institute);fprintf(fp,"%d",p->stime);fprintf(fp,"%d",p->score);fprintf(fp,"%d",p->term);

printf("是否继续添加,y/n[]\b\b");}while(getchar()=='y');fclose(fp);printf("f******************操作完成,按任意键回到上一级菜单**************\n");getchar();Mangers();}Subjects*foutput() //把文件信息写入链表{FILE*fp;Subjects*l,*w,*r;l=(Subjects*)malloc(sizeof(Subjects));l->next=NULL;r=l;if((fp=fopen("Subjects.txt","r"))==NULL)printf("打开文件失败");while(!feof(fp))/*把文件里的信息写进链表,并判断是否到文件末尾*/{w=(Subjects*)malloc(sizeof(Subjects));fscanf(fp,"%d",&w->num);fscanf(fp,"%s",&w->name);fscanf(fp,"%s",&w->institute);fscanf(fp,"%d",&w->stime);fscanf(fp,"%d",&w->score);fscanf(fp,"%d",&w->term);w->next=NULL;r->next=w;r=w;}fclose(fp);return(l);总学//总学//voidprin()管理员浏览课程信息{system("cls");Subjects*p,*l;l=foutput();inti=0;if(l==NULL){printf("没有此门课程记录\n");return;}printf("|课程号课程名称开课学院\t时总学分开课学期|\n");for(p=l->next;p;p=p->next)printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);i++;}printf("\n\n******************操作完成,按任意键回到上一级菜单*****************松«H\・getchar();getchar();Mangers();}//管理员课程信//管理员课程信息查询{system("cls");inta,score;intt=1;charname[20];Subjects*p,*l,*p1;

printf("\n\n\t\t**\n");l=foutput();printf("\n\n\t\t**\n");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\nChioseyournumber(1-3):[]\b\b");scanf("%d",&a);switch(a){case1:system("cls");printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");for(p1=l->next;p1;p1=p1->next){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p1->num,p1->name,p1->institute,p1->stime,p1->score,p1->term);printf("请输入要查找的课程名称\n");scanf("%s",name);getchar();printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");for(p=l->next;p;p=p->next){if(strcmp(name,p->name)==0){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);t=0;}}if(t==1){printf("\t\n 未找到!\n");break;case2:system("cls");printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");for(p1=l->next;p1;p1=p1->next){printf("| %-7d%-18s%-19s%-11d%-10d%-6d|\n",p1->num,p1->name,p1->institute,p1->stime,p1->score,p1->term);}printf("请输入要查找的课程的学分\n");scanf("%d",&score);getchar();printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");for(p=l->next;p;p=p->next)if(score==p->score){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);t=0;}}if(t==1){printf("\t\n 未找到!\n");}break;case3:break;}printf("******************操作完成,按任意键回到上一级菜单**************\n");getchar();Mangers();voidinsert()//插入课程信息{system("cls");Subjects*subj;Subjects*l=NULL;FILE*fp;intx;system("cls");intsize=sizeof(Subjects);if((fp=fopen("Subjects.txt","a"))==NULL){printf("can'topenfile\n");return;do{subj=(Subjects*)malloc(sizeof(Subjects));printf("请输入选修课程信息:\n");printf("num:");scanf("%d",&x);subj->num=x;flushall();printf("name:");scanf("%s",subj->name);flushall();printf("institute:");scanf("%s",subj->institute);flushall();printf("stime:");scanf("%d",&x);subj->stime=x;flushall();printf("score:");scanf("%d",&x);subj->score=x;flushall();printf("term:");scanf("%d",&x);subj->term=x;flushall();subj->next=NULL;l=subj;fprintf(fp,"%d",subj->num);fprintf(fp,"%s",subj->name);fprintf(fp,"%s",subj->institute);fprintf(fp,"%d",subj->stime);fprintf(fp,"%d",subj->score);fprintf(fp,"%d",subj->term);

//fprintf(fp,"\r\n");printf("是否继续输入数据y/n[]\b\b");}while(getchar()=='y');fclose(fp);printf("******************操作完成,按任意键回到上一级菜单**************\n");getchar();getchar();Mangers();}//删除//删除课程信息{system("cls");Subjects*p1,*p2,*p3,*l;FILE*fp;intnum;l=foutput();p2=p1=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p1!=NULL){printf("| %-7d%-18s%-19s%-11d%-10d%-6d|\n",p1->num,p1->name,p1->institute,p1->stime,p1->score,p1->term);printf("\n");p1=p1->next;}printf("请输入想要删除的课程号:\n");scanf("%d",&num);if(p2->num==num){p3=l->next;l->next=p2->next;free(p3);if(l->next==NULL){p1=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p1!=NULL){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p1->num,p1->name,p1->institute,p1->stime,p1->score,p1->term);printf("\n");p1=p1->next;}if((fp=fopen("Subjects.txt","w"))==NULL){printf("can'topenfile\n");return;p1=l->next;while(p1!=NULL){fprintf(fp,"%d",p1->num);fprintf(fp,"%s",p1->name);fprintf(fp,"%s",p1->institute);fprintf(fp,"%d",p1->stime);fprintf(fp,"%d",p1->score);fprintf(fp,"%d",p1->term);p1=p1->next;}fclose(fp);getchar();getchar();menu();}p3=l->next;p2=l->next->next;while(p2!=NULL){if(p2->num==num){p3->next=p2->next;p2=p3->next;}else{p3=p2;p2=p2->next;}}system("cls");p1=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p1!=NULL){printf("| %-7d%-18s%-19s%-11d%-10d%-6d|\n",p1->num,p1->name,p1->institute,p1->stime,p1->score,p1->term);printf("\n");p1=p1->next;}if((fp=fopen("Subjects.txt","w"))==NULL){printf("can'topenfile\n");return;}p1=l->next;while(p1!=NULL){fprintf(fp,"%d",p1->num);fprintf(fp,"%s",p1->name);fprintf(fp,"%s",p1->institute);fprintf(fp,"%d",p1->stime);fprintf(fp,"%d",p1->score);fprintf(fp,"%d",p1->term);p1=p1->next;}fclose(fp);printf("******************操作完成,按任意键回到上一级菜单**************、«H\・getchar();getchar();Mangers();}//修改课程信息//修改课程信息{system("cls");Subjects*l,*p;inti,j,k;FILE*fp;l=foutput();p=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p!=NULL){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);printf("\n");p=p->next;}do{printf("请输入要要修改的选修课程课程号:");scanf("%d",&i);getchar();printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");for(p=l->next;p;p=p->next){if(i==p->num){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);break;}}printf("\n选择修改的信息\n");printf("\n\t1.总学时");printf("\n\t2.总学分");printf("\n\t3.开课学期");printf("\t\t[]\b\b");scanf("%d",&j);switch(j){case1:printf("实际的总学时为:");scanf("%d",&k);p->stime=k;break;case2:printf("实际的总学分为:");scanf("%d",&k);p->score=k;break;case3:printf("实际的开课学期为:");scanf("%d",&k);p->term=k;break;}system("cls");p=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p!=NULL){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);printf("\n");p=p->next;}printf("是否继续修改?y/n []\b\b");getchar();}while(getchar()=='y');if((fp=fopen("Subjects.txt","w"))==NULL){printf("can'topenfile\n");return;

p=l->next;while(p!=NULL){fprintf(fp,"%d",p->num);fprintf(fp,"%s",p->name);fprintf(fp,"%s",p->institute);fprintf(fp,"%d",p->stime);fprintf(fp,"%d",p->score);fprintf(fp,"%d",p->term);p=p->next;}fclose(fp);printf("\n\n******************操作完成,按任意键回到上一级菜单******************\n");printf("\n\n******************操作完成,按任意键回到上一级菜单******************\n");getchar();getchar();Mangers();voidchoose(){system("cls");Subjects*p,*q,*l;inti,j=0,k;inta[10];FILE*fp;l=foutput();p=l->next;printf("|课程号课程名称开课学院\t总学时总学分开课学期|\n");while(p!=NULL){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);printf("\n");p=p->next;printf("请输入你要选修的课程号:\n");scanf("%d",&i);getchar();总学//printf("\t|课程号课程名称开课学院\t总学时分 开课学期|\n");总学do{for(p=l->next;p;p=p->next){if(i==p->num){printf("|%-7d%-18s%-19s%-11d%-10d%-6d|\n",p->num,p->name,p->institute,p->stime,p->score,p->term);printf("\n");a[j]=i;j++;}printf("请输入你要选修的课程号,如果确认输入完要选修的课程的编号,请输入0\n:");scanf("%d",&i);}while(i!=0);FILE*fp1;if((fp1=fopen("mySubjects.txt","w"))==NULL){printf("can'topenfile\n");return;}for(k=0;k<j;k++){for(q=l->next;q;q=q->next)if(q->num==a[k])

fprintf(fp1,"%d",q->num);fprintf(fp1,"%s",q->name);fprintf(fp1,"%s",q->institute);fprintf(fp1,"%d",q->stime);fprintf(fp1,"%d",q->score);fprintf(fp1,"%d",q->term);}}fclose(fp1);printf("\n\n******************操作完成,按任意键回到主上一级菜单******************\n");printf("\n\n******************操作完成,按任意键回到主上一级菜单******************\n");getchar();getchar();Students();}//输入密voidpassword//输入密intk,j,i=3;chars[8];charpassword[]="123456";do{printf("\n\n请输入六位数的密码:");//scanf("%s",s);j=strlen(s);for(k=0;k<6;k++){s[k]=getch();printf("*");}getchar();getchar();if(password[0]==s[0]&&password[1]==s[1]&&password[2]==s[2]&&password[3]==s[3]&&password[4]==s[4]&&password[5]==s[5])break;}else{if((i-1)==0){printf("youhaveenter3times!");getchar();getchar();exit(0);}printf("Error!youhaveonly%dtimes,enteragain:",i-1);i--;}}while(i>0);

voidMangers1()intn;password();system("cls");\n")\n")puts("\n

温馨提示

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

评论

0/150

提交评论