学生选修课程系统设计.docx
- 文档编号:23153530
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:37
- 大小:277.25KB
学生选修课程系统设计.docx
《学生选修课程系统设计.docx》由会员分享,可在线阅读,更多相关《学生选修课程系统设计.docx(37页珍藏版)》请在冰豆网上搜索。
学生选修课程系统设计
《数据结构与C语言》综合训练
实习报告
题目:
学生选修课程系统设计
学号
姓名
专业班级
指导教师
实践日期
一、综合训练目的与要求
综合训练是计算机科学与技术、信息管理与信息系统、软件工程专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。
本课综合训练的目的和任务:
1.巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握
2.掌握C语言编程和程序调试的基本技能
3.利用C语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C语言、数据结构解决实际问题的能力
二、综合训练任务
实习题目:
学生选修课程系统设计。
题目需求:
运用结构体和链表设计一个简单的选修课程管理系统,做出系统菜单,并作出管理员菜单和学生菜单两个子菜单,使之能完成管理员的对课程信息的录入、浏览、查询、添加、删除、修改与学生对选修课程的浏览、查询、选择,浏览学生已选的选修课程和删除选错的课程。
三、总体设计
方案设计:
图1总体流程图
设计思路:
1、此程序是要写一个选修课管理系统,首先要先设计一个主菜单,在由主菜单进入进行函数调用,进行下面的操作。
由于有管理员与学生两类人登陆系统,进行不同的操作,所以设计两个子菜单,以便区分管理
2、由管理员先录入信息,然后管理员和学生再对录入的信息进行操作,所以必须对每个程序修改的数据进行保存,采用文件的形式,数据均保存在文件内,可以通过文件指针对文件进行读写与保存。
3、用一个结构体表示一条课程信息,每个模块的具体操作时在链表里,每次操作时先将信息从文件读出存在链表,进行操作,然后再将信息写入文件。
四、详细设计说明
1、模块说明
A.录入课程:
Input()
流程图如下:
图2录入信息流程图
详细说明:
此模块可以使管理员通过对文件的读写完成对全部选修课程的基本信息(包括课程号,课程名称,开课学院,总学时,总学分,开课学期)的一次性录入,以便进行以后的操作。
其中,课程号定义为整型,开课名称和开课学院定义为20个字节的字符型,总学时、总学分和开课学期定义为整型。
此函数没有返回值,将录入的选修课程信息存入一个文件内。
B、浏览课程
prin(),prin2()
图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、初始界面:
图10初始界面
2,选择1,输入并输入密码,进入管理员的界面如下:
图11管理员菜单
3.选择1根据提示录入课程信息,再返回管理员菜单。
再选择2,进入浏览,图示如下:
图12浏览信息界面
4,从管理员菜单选择3,进入查询:
图13查询界面
例如按照学分查找:
输入2;
图14查询界面
5,添加课程与录入课程相似
图15添加界面
6,删除课程;输入想要删除的课程号码,3,即可完成删除操作
图16删除课程
7,修改课程,
图17修改课程
输入想要修好的课程号码2,再输入要修改的类型,再输入要修改的数值即可。
8,从学生身份登录以后,可以选择浏览全部,或者按照学分和选修课程编号来进行查询
图18学生的查询课程
9,从学生身份登录以后,
图19选择课程界面
先输入要选择的课程号,然后会弹出是否确定所选的课程,确定就输入0,否则则继续进入选择课程界面;
10.在选择自己的课程以后可以输入4,进行查询自己已经选择的课程
图20浏览已选课程
11,删除误选的课程,然后再输入误选编号,即可
图21删除误选课程
八、附录:
核心代码清单
//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("******************操作完成,按任意键回到上一级菜单**************\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******************操作完成,按任意键回到上一级菜单******************\n");
getchar();
getchar();
Mangers();
}
voidsearch()//管理员课程信息查询
{
system("cls");
inta,score;
intt=1;
charname[20];
Subjects*p,*l,*p1;
l=foutput();
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\n\t\t**************************************\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();
}
voiddel()//删除课程信息
{
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",p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 选修 课程 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)