040学生选修课程系统说明书.docx
《040学生选修课程系统说明书.docx》由会员分享,可在线阅读,更多相关《040学生选修课程系统说明书.docx(26页珍藏版)》请在冰豆网上搜索。
040学生选修课程系统说明书
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年春季学期
C程序设计课程设计
题目:
学生选课系统
专业班级:
物联网一班
姓名:
李荣卿
学号:
12280114
指导教师:
滕永晨
成绩:
前言
随着学校规模的不断扩大,专业、班级、学生的数量急剧增加,有关学生选课的各种信息量也成倍增长,而目前许多高校的学生选课管理仍停留在复杂的人工操作上,重复工作较多,工作量大,效率低,因此,迫切需要开发基于互联网的课程信息管理系统来提高管理工作的效率。
基于校园网的学生选课管理系统,在学生选课的规范管理、科学统计和快速查询方面具有较大的实用意义。
它提高了信息的开放性,大大地改善了学生、教师对其最新信息查询的准确性。
摘要
学生选课系统是一个教育单位不可缺少的重要系统组成部分,它对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以学生选课管理系统应该能够为广大学、师生提供充足的信息和快捷的课程选择过程,有助于学生选好每一门课程,此系统主界面设有管理员登录信息和学生登录信息,方便学生选择。
管理员可以浏览、查询所有课程,删除部分课程,也可添加课程。
学生可浏览所有课程、查询课程信息及选修课程、浏览所选课程、删除所选课程等功能。
关键词:
管理员学生课程性质学分
目录
前言I
摘要II
目录III
1、系统需求分析1
2、系统总体设计2
3、详细设计3
4.系统测试6
5、软件使用说明11
设计总结12
参考文献13
致谢14
附录(源程序代码)15
1、系统需求分析
现代的社会是信息化的社会,信息无所不在。
在生产领域、流通领域、各个部门每天都和信息打交道,如何处理如此多的信息成为了一个重要的课题。
学生在学期开始选课是教学活动中的一个重要环节,该环节如果能管理好,它不仅能加快学生的选课速度,也提高了整个活动的效率。
系统的主要使用对象是需要选课的学生。
学生在选课是要察看各个课程的详细信息,还要选择一些感兴趣的课程,需要生成课表,在发现课程有冲突后能够修改先前选择的信息。
需要随学生选课的变化,计算相应的总学分。
在全部选定后,打印报表。
系统还需要管理员来查看和修改学生的总体选课情况课程信息和学生信息。
2、系统总体设计
系统总体设计如图2-1所示
图2-1系统主体设计
3、详细设计
3.1主函数、头文件及结构体声明
主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块(如图3-1所示):
图3-1主函数、头文件及结构体声明
3.2管理员功能模块
管理员的功能一共有四个功能:
浏览,查询,添加,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用。
3.3浏览模块
浏览模块主要用管理员中的“浏览课程”和学生功能中的“浏览所有所有课程”,将所有的课程信息输出。
3.4添加模块
添加模块主要用于增加课程信息,采用链表的操作。
3.5删除模块
删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作。
3.6选修课程模块
选修课程模块采用插入链表的操作。
3.7学生功能菜单
学生功能菜单包括六个功能:
浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数(如图3-2所示):
图3-2学生功能菜单
3.8读取文件模块
读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件。
3.9保存文件模块
保存文件模块共分为两个子程序,分别是将修改的信息保存到所有课程和学生已选课程保存到相应的文件中。
3.10查询模块
查询模块主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,查询模块共分为三个查询方法:
按课程名称查找,按课程性质查找和按学分查找switch语句中,每一个case语句就是一中查询方法:
(如图3-3所示)
图3-3查询模块
4.系统测试
开始运行(如图4-1所示)
图4-1开始运行
管理员界面(如图4-2所示)
图4-2管理员界面
管理员浏览模块(如图4-3所示)
图4-3管理员浏览模块
管理员课程查询模块(如图4-4所示)
图4-4管理员课程查询模块
学生界面(如图4-5所示)
图4-5学生界面
选课模块(如图4-6所示)
图4-6选课模块
学生浏览模块(如图4-7所示)
图4-7学生浏览模块
学生查询模块(如图4-8所示)
图4-8学生查询模块
学生删除模块(如图4-9所示)
图4-9学生删除模块
5、软件使用说明
首先管理者将现有的课程信息(包括课程编号、课程名称、课程类型、学时、学分、已选人数(初始为零)),并将其进行文件保存,以便以后使用。
若要修改(增加和删除)课程信息,需要先从文件中录入已存信息,再输入编号对其查找并进行相关操作。
学生选课需要先输入课程号,若没有课程的信息,需先录入此课程的信息在进行选课和退课。
在选课和退课前,可以先浏览课程信息,并记住要选课程的编号,以便选课时需要。
设计总结
通过这次课程设计,我对C语言有了更深刻的认识,了解了一个简单的软件的编写流程、设计思路,并掌握了MicrosoftVisualC++6.0的基本用法,增强了程序的编写能力。
从拿到题目到完成整个编程,从理论到实践,在这两周时间里,可以学到很多很多的东西,同事不仅巩固了以前所学过的知识,而且学到了很多在课本上所没有学到的知识。
在设计过程中遇到的麻烦,可以说是多如牛毛。
这毕竟是第一次这样的课程设计,也难免会遇到各种各样的问题。
同时,在设计的过程中我们也发现了自己的不足之处,对以前所学的知识理解的不够彻底,掌握得不够牢固,比如说链表文件与结构体的结合应用等。
通过这次课程设计之后,我一定会把以前所学过的知识系统的复习一下。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正得提高自己的实际动手能力和独立思考能力。
参考文献
[1]C/C++程序设计教程(第二版),王连相,中国铁道出版社,2011
[2]C语言程序设计,谭浩强,清华大学出版社,1999
[3]C语言程序设计题解与上机指导,谭浩强,清华大学出版社,1999
[4]C/C++程序设计上机指导与测试(第二版),王连相,中国铁道出版社,2011
[5]C语言函数手册,机械工业出版社,1999
[6]C语言的实际应用,安徽科技技术出版社,2000
致谢
在这次c语言课程设计中,首先得感谢滕老师老师给予我们指导与帮助,在他的指导帮助下,才使得我们能够顺利的完成课程设计,更重要的是在这次课程设计中,极大的提高我的c语言设计能力,也让我深刻的了解到自己在这方面的诸多不足,使得我能更清楚的了解自己的水平,加强了我对这门学科的认识。
同时也感谢和我一起完成这课设的曹旭东同学,我们在互相交流帮助中也相互学习到许多小的应用技巧,解决了一些列问题。
还要感谢那些给予我们帮助的同学,也给了我很大的帮助。
附录(源程序代码)
#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;
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;
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;
returnhead;
}
voidsavefile()//保存文件
{
SUB*p;
FILE*fp;
fp=fopen("2.txt","w");
if(fp==NULL)exit(0);
printf("课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期\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("创建后的信息已放入'2.txt'文件中\n");
system("pause");
}
voidsavefile1()//保存文件
{
SUB*p;
FILE*fp;
fp=fopen("3.txt","w");
if(fp==NULL)exit(0);
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("创建后的信息已放入'3.txt'文件中\n");
system("pause");
}
voidreadfile()//阅读文件
{
void*myInsert(SUB*);
SUB*newSub;//新课程
intnum,stime,ttime,etime;
intscore,term;
charc,name[20],kind[10],fname[20];
FILE*fp;
fp=fopen("2.txt","r");
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);
}
voidprin()//浏览所有课程
{
SUB*ptr;
head=NULL;
readfile();
if(head==NULL)
{
printf("\n\n\t*********NORECORDS!
************\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");
}
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");
}
void*myInsert(SUB*subj)//链表插入操作
{
SUB*ptr,*ptr2;
ptr=subj;
if(head==NULL)
{
head=ptr;
head->next=NULL;
}
else
{
for(ptr2=head;ptr2;ptr2=ptr2->next)
if(ptr2->next==NULL)
{
ptr2->next=subj;
subj->next=NULL;
break;
}
}
returnhead;
}
void*insert()//插入课程信息
{
SUB*ptr,*subj;
intsize=sizeof(SUB);
charch,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");
printf("\n继续插入请按回车\n");
printf("\n结束添加课程按0:
[]\b\b");
ch1=getchar();//将回车键赋给CH1,否则subj->term输完后输入的回车键会赋给CH,因此用CH1填补。
ch=getchar();
}
returnhead;
}
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);
}
else
p1=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");
}
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
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
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");
}
voidsearch()//课程信息查询
{
inta,num;
intt=1;
chartype[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\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);