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

下载本文档

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

文档简介

1、数据结构与C语言综合训练实习报告题 目: 学生选修课程系统设计 学 号姓 名专业班级指导教师实践日期目 录一、综合训练目的与要求3二、综合训练任务3三、总体设计3四、详细设计说明4五、调试与测试9六、实习日志13七、实习总结14八、附录:核心代码清单1532一、综合训练目的与要求综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完程序设计语言(C)、数据结构课程后进行的一次全面的综合练习。本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计

2、4. 掌握书写程序设计说明文档的能力5. 提高运用C语言、数据结构解决实际问题的能力二、综合训练任务实习题目:学生选修课程系统设计。题目需求:运用结构体和链表设计一个简单的选修课程管理系统,做出系统菜单,并作出管理员菜单和学生菜单两个子菜单,使之能完成管理员的对课程信息的录入、浏览、查询、添加、删除、修改与学生对选修课程的浏览、查询、选择,浏览学生已选的选修课程和删除选错的课程。三、总体设计方案设计:主函数主菜单管理员菜单学生菜单录入课程浏览课程查询课程添加课程删除课程修改课程浏览所有课程查询课程选择课程浏览学生选择的课程删除错选课程返回到上一级菜单返回到上一级菜单退出程序 图1 总体流程图设

3、计思路:1、此程序是要写一个选修课管理系统,首先要先设计一个主菜单,在由主菜单进入进行函数调用,进行下面的操作。由于有管理员与学生两类人登陆系统,进行不同的操作,所以设计两个子菜单,以便区分管理2、由管理员先录入信息,然后管理员和学生再对录入的信息进行操作,所以必须对每个程序修改的数据进行保存,采用文件的形式,数据均保存在文件内,可以通过文件指针对文件进行读写与保存。3、用一个结构体表示一条课程信息,每个模块的具体操作时在链表里,每次操作时先将信息从文件读出存在链表,进行操作,然后再将信息写入文件。四、详细设计说明1、模块说明A录入课程:Input ()流程图如下: 录入课程信息模块输入课程号

4、、课程名称、开课学院、总学时、总学分存入文件并返回管理员菜单 图2 录入信息流程图详细说明:此模块可以使管理员通过对文件的读写完成对全部选修课程的基本信息(包括课程号,课程名称,开课学院,总学时,总学分,开课学期)的一次性录入,以便进行以后的操作。其中,课程号定义为整型,开课名称和开课学院定义为20个字节的字符型,总学时、总学分和开课学期定义为整型。此函数没有返回值,将录入的选修课程信息存入一个文件内。B、浏览课程prin(),prin2()课程信息模块显示已录入的所有课程信息返回管理员菜单 图3 浏览课程流程图详细说明:使管理员和学生能浏览到管理员已录入的所有选课信息,此模块用到了文件操作的

5、读出功能。此函数也没返回值,若操作完成,能返回上一级菜单;C、查询课程search(),search1()流程图如下:2、按学分查找选择查询方式查询模块1、按课程名称查找查找是否找到返回管理员菜单显示该课程显示未找到 图4 查询课程流程图详细说明:此模块有两种查询方式,第一是按课程名查找,第二是按学分查找,它是通过循环进行推移查找的,若找到,这显示该选修课程的全部信息,否者,则显示未找到,以便给以提示。此模块可以实现对课程信息的查询,只要中输入课程号或某课程的学分,就可以查询到该课程的相关信息。先输入1或2选择查找方式,然后再输入字符型的课程名或整型的学分即可查找。 管理员和学生均能通过此程序

6、查询, 本程序用到文件的读出功能。操作完成,返回到上一级菜单。D、添加课程Insert()流程图如下:添加模块新 增 课 程 号新 增 课 程 名 称新 增 开 课 学 院新 增 总 学 时新 增 总 学 分新 增 开 课 学 院是否继续是否返回管理员菜单 图5 添加课程流程图详细说明:将一个课程的所有信息都录入,程序会先打开相应文件,运用文件文件写追加的方式打开,再将新增的课程信息写入文件并保存。此函数没返回值,输入的课程号、总学时、总学分、开课学期都是整型,课程名和开课学院是字符型。操作完成后,回到上一级菜单。E、删除课程 del() del1()删除模块删除该条课程信息返回到上一级菜单输

7、入课程号将修改后的所有课程信息显示并保存在文件 中流程图如下: 图6 删除课程流程图详细说明:此程序是完成管理员对课程信息的删除和学生对自己错选的课程信息的删除的操作。只要输入要删除的课程号,系统便利用循环推移查找到要删除的课程号,将此条课程信息删除。并将剩余的课程信息通过文件信息保存在文件内,此程序仅需输入一个整型的课程号,没有返回值。运用到了文件的读写功能。操作完成后,回到上一级菜单。F、修改课程modify()流程图如下: 修改课程是否继续3、修改开课学期2、修改总学分1、修改总学时输入要修改信息的课程号返回管理员菜单否是 图7 修改课程流程图详细说明:此程序完成的是管理员对选修课程的修

8、改,若某一个课程的总学时、总学分或开课学院出现错误,可以通过此程序修改。此程序没有返回值。输入一个整型的课程号,程序就会查找到该条课程信息,再输入一个整型序号,选择要修改的项目,再输入实际的整型数据,便可完成对信息的修改。修改之后,将显示新的课程信息,并将新的课程信息通过文件指针写入文件内保存。操作完成后,返回管理员菜单。G、选择课程choose()流程图如下:选择课程显示所选的课程信息,并保存到一个新的文件内是否继续选 课输入要选择的课程号是否返回学生菜单 图8 选择课程流程图详细说明:此程序执行的是使学生选择自己所需要的选修课程。没有返回值。输入一个整型的课程号,程序通过循环查找到该课程号

9、,并将该课程号对应的课程信息通过文件指针写入另一个文件内保存,并将信息显示出来。操作完成后,返回学生菜单。H、浏览所选信息prin()l流程图如下:浏览所选信息返回学生菜单显示学生的选课信息 图9 浏览选课信息流程图详细说明:此程序是通过文件指针打开文件已有的学生选课信息文件,将文件内的信息写入链表,然后显示出来。此程序没返回值。操作完成后,返回到上一级菜单五、调试与测试1、初始界面: 图10 初始界面2,选择1,输入并输入密码,进入管理员的界面如下: 图11 管理员菜单3选择1 根据提示录入课程信息,再返回管理员菜单。 再选择2,进入浏览,图示如下: 图12 浏览信息界面4,从管理员菜单选择

10、3,进入查询: 图13 查询界面例如按照学分查找:输入 2; 图14 查询界面5,添加课程与录入课程相似 图15 添加界面6,删除课程;输入想要删除的课程号码,3,即可完成删除操作 图16 删除课程7,修改课程, 图17 修改课程输入想要修好的课程号码2,再输入要修改的类型,再输入要修改的数值即可。8,从学生身份登录以后,可以选择浏览全部,或者按照学分和选修课程编号来进行查询 图18 学生的查询课程9,从学生身份登录以后, 图19 选择课程界面先输入要选择的课程号,然后会弹出是否确定所选的课程,确定就输入0,否则则继续进入选择课程界面;10.在选择自己的课程以后可以输入4,进行查询自己已经选择

11、的课程 图20 浏览已选课程11,删除误选的课程,然后再输入误选编号,即可 图21 删除误选课程八、附录:核心代码清单/ 123.cpp : Defines the entry point for the console application./#include "stdafx.h"#include "stdio.h"#include"string.h"#include"malloc.h"#include"stdlib.h"#include "conio.h"void me

12、nu();void Students();void Mangers();struct Subjectsint num;char name20;char institute20;int stime;int score;int term;struct Subjects *next; void input() /录入学生信息system("cls");Subjects *p;Subjects *l=NULL;FILE *fp; int x; if(fp=fopen("Subjects.txt","w")=NULL) printf("

13、;can't open filen"); 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->in

14、stitute); 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;

15、 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 bb"); while(getchar

16、()='y'); fclose(fp); printf("*操作完成,按任意键回到上一级菜单*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("打开文件失败"); whil

17、e(!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); fs

18、canf(fp,"%d",&w->term); w->next=NULL; r->next=w; r=w; fclose(fp); return (l);void prin() /管理员浏览课程信息system("cls");Subjects *p,*l;l=foutput();int i=0;if(l=NULL)printf("没有此门课程记录n");return;printf(" | 课程号 课程名称 开课学院t 总学时 总学分 开课学期 |n");for(p=l->next ;

19、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("nn*操作完成,按任意键回到上一级菜单*n");getchar();getchar();Mangers();void search() /管理员课程信息查询 system("cls"); int a, score; int t=1; char

20、 name20; Subjects *p,*l,*p1; l=foutput();printf("nntt*请选择查询方式*n"); printf("nttt1-按课程名称查找n"); printf("nttt2-按学分查找n"); printf("nttt3-退出查找n"); printf("nntt*n"); printf("nnChiose your number(1-3): bb"); scanf("%d",&a); switch(a)ca

21、se 1: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(&q

22、uot;%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(&qu

23、ot;tn未找到!n");break;case 2: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("请输

24、入要查找的课程的学分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->ter

25、m );t=0;if(t=1)printf("tn未找到!n");break;case 3:break; printf("*操作完成,按任意键回到上一级菜单*n"); getchar(); Mangers();void insert() /插入课程信息system("cls");Subjects *subj;Subjects *l=NULL;FILE *fp;int x;system("cls");int size=sizeof(Subjects);if(fp=fopen("Subjects.txt&qu

26、ot;,"a")=NULL) printf("can't open filen"); return; do subj=(Subjects*)malloc(sizeof(Subjects); printf("请输入选修课程信息:n"); printf("num:"); scanf("%d",&x); subj->num =x; flushall(); printf("name:"); scanf("%s",subj->name )

27、; 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:&q

28、uot;); 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 "

29、,subj->score); fprintf(fp," %d",subj->term ); / fprintf(fp," rn"); printf("是否继续输入数据 y/n bb"); while(getchar()='y'); fclose(fp); printf("*操作完成,按任意键回到上一级菜单*n"); getchar(); getchar(); Mangers();void del() /删除课程信息 system("cls"); Subjects *p

30、1,*p2,*p3,*l; FILE *fp; int num; 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=

31、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%-6

32、d|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't open filen"); return; p1=l->next ; while(p1!=NULL) fprintf(fp," %d&quo

33、t;,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

34、 ; 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",p

35、1->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't open filen"); return; p1=l->next ; while(p1!=NULL) fprintf(fp," %d",p1->n

36、um); 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("*操作完成,按任意键回到上一级菜单*n"); getchar(); ge

37、tchar(); Mangers(); void modify() /修改课程信息system("cls");Subjects *l,*p;int i,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 ,

38、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

39、",p->num ,p->name ,p->institute ,p->stime ,p->score ,p->term );break; printf("n选择修改的信息n");printf("nt1. 总学时");printf("nt2. 总学分");printf("nt3. 开课学期"); printf("tt bb");scanf("%d",&j);switch(j)case 1:printf("实际的总

40、学时为:");scanf("%d",&k);p->stime =k;break;case 2:printf("实际的总学分为:");scanf("%d",&k);p->score =k;break;case 3:printf("实际的开课学期为:");scanf("%d",&k);p->term =k;break;system("cls");p=l->next ;printf(" | 课程号 课程名称 开课学

41、院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 bb"); getchar(); while(getchar()='y');if(fp=fopen(

42、"Subjects.txt","w")=NULL) printf("can't open filen"); 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(

43、fp,"%d ",p->score);fprintf(fp,"%d",p->term); p= p->next; fclose(fp);printf("nn*操作完成,按任意键回到上一级菜单*n");getchar();getchar();Mangers();void choose()system("cls");Subjects *p,*q,*l;int i,j=0,k;int a10;FILE *fp;l=foutput();p=l->next ;printf(" | 课程号 课

44、程名称 开课学院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(

45、"t| 课程号 课程名称 开课学院t 总学时 总学分 开课学期|n"); dofor(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"); aj=i; j+; printf("请输入你要选修的课程号,如果确认输入完要

46、选修的课程的编号,请输入0n:"); scanf("%d",&i);while(i!=0);FILE *fp1;if(fp1=fopen("mySubjects.txt","w")=NULL) printf("can't open filen"); return; for(k=0;k<j;k+)for(q=l->next ;q;q=q->next )if(q->num =ak)fprintf(fp1," %d",q->num); fprin

47、tf(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("nn*操作完成,按任意键回到主上一级菜单*n"); getchar();getchar(); Students();void p

48、assword () /输入密码 int k,j,i=3; char s8; char password="123456" do printf("nn请输入六位数的密码:"); /scanf("%s",s); j=strlen(s); for(k=0;k<6;k+) sk=getch(); printf("*"); getchar(); getchar(); if(password0=s0 && password1=s1 && password2=s2 && password3=s3 && password4=s4 && password5=s5) break; else if(i-1)=0) printf("you have enter 3 times!"); getchar(); getchar(); exit(0); printf(&q

温馨提示

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

最新文档

评论

0/150

提交评论