C++ 学生选修课程系统.docx
- 文档编号:24050030
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:28
- 大小:113.95KB
C++ 学生选修课程系统.docx
《C++ 学生选修课程系统.docx》由会员分享,可在线阅读,更多相关《C++ 学生选修课程系统.docx(28页珍藏版)》请在冰豆网上搜索。
C++学生选修课程系统
广东工业大学华立学院
课程设计
课程名称____________程序设计基础___________
题目名称__________学生选修课程系统___________
学生学部(系)_计算机与艺术设计学部________
专业班级___________09计算机x班____________
学 号______________xxxxxxx_______________
学生姓名________________xxx_________________
指导教师_________________xxx________________
2010年7月2日
广东工业大学华立学院
课程设计任务书
题目名称
学生选修课程系统
学生学部(系)
计算机与艺术设计学部
专业班级
09计算机x班
姓名
xxx
学号
xxxxxxxx
一、课程设计的内容
对学生选修信息进行管理,包括对学生选修信息的输入、输出、查询、删除等功能,是高等学校教务管理的重要组成部分。
选修信息包括:
课程编号、课程名称、总学时、授课学时、实验或上机学时、学分、开课学期等。
假设,教师现收集到几个选修课的信息,要求用C语言编写一个简单的选修课程系统,可进行录入、查询、修改何浏览等功能。
学习相关开发工具何应用软件,熟悉系统建设过程。
二、课程设计的要求与数据
假定有n门课程,,每门课程都有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课.试设计一选修课程系统,使之能提供一下功能:
(1)系统以菜单方式工作;
(2)课程信息和学生信息的录入功能(课程信息有文件保存)----输入;
(3)课程信息浏览功能----输出;
(4)查询功能(至少一种查询方式)---算法;
(5)按学分查询;
(6)某门课程学生选修情况(可选项).
三、课程设计应完成的工作
(1)编写算法;
(2)算法测试,并有具体的测试结果和结果分析;
(3)撰写课程设计报告。
四、课程设计(论文)进程安排
序号
设计(论文)各阶段内容
地点
起止日期
1
审题、搜集资料
图书馆
2010.6.9-6.14
2
编写算法并测试
宿舍
2010.6.14-6.20
3
撰写课程设计报告
宿舍
2010.6.20-6.22
五、应收集的资料及主要参考文
[1]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
[2]谭浩强.C程序设计题解与上机指导(第三版).北京:
清华大学出版社,2005
[3]谭浩强.C程序设计教程北京:
清华大学出版社,2007
[4]李春葆,张植民,肖忠付.C语言设计题典[M].北京:
清华大学出版社,2002
发出任务书日期:
2010年6月9日指导教师签名:
计划完成日期:
2010年7月2日教学单位责任人签章:
一序言4
二数据结构设计5
三系统大纲(各功能模块的具体实现算法——流程图)5
四模块设计(源程序)6
五结果分析20
六总结20
一:
序言
近年来中国经济的飞速发展,Internet技术得到了普遍应用,为社会作出了重大的贡献。
作为培养人才的摇篮——院校,在这改革浪潮中必须紧跟时代的发展,在学生成绩管理效率上必须有所提高,不能再采取人手录入的方式,因为它浪费了许多人力物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
所以,学生选修课程管理系统的设计与开发也是一个时代必经的阶段。
时代在进步,科学技术在不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
目前,学校学生选修课程管理是教务管理中的一个极为重要的环节。
由于学校规模进一步扩大,学生人数逐年上升,学生情况的管理也变得越来越复杂。
面对如此繁杂的任务。
如果让个人去管理文档,就会显得费时费力。
尤其在管理课程时,任务更加繁重,就课程管理本身来说,它是一项任务繁重、时效性较强的系统工作,它不但涉及学生个人选修课程查询,更涉及到各教师的工作效率和质量。
近年来随着计算机的迅速发展,计算机已经在社会各个领域显示了它巨大的作用。
毋庸置疑,切实有效地把计算机管理引入学校学生选修课程管理中,对于促进学校管理制度,提高学校教学质量与办学水平有着显著意义。
二:
数据结构设计
本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找,添加,删除,课程的选修,追加选修的课程.课程信息采用结构体这种数据结构.
三:
系统大纲
四:
模块设计
(一)主函数,头文件及结构体声明
主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块
[程序]
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
typedefstructsubjects//课程结构体
{
intnum;//课程编号
charname[20];//课程名称
charkind[10];//课程性质
intstime;//总学时
intttime;//授课学时
intetime;//实验或上机学时
intscore;//学分
intterm;//开课学期
structsubjects*next;
}SUB;
SUB*head=NULL;
intmain()
{
intn,w=1;
do
{puts("\n\n\t\t制作者:
广东工业大学华立学院09计算机2班何伟坚黄宏业\n\n");
system("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;
}
(二)管理员功能模块
管理员的功能一共有四个功能:
浏览,查询,添加,删除课程.运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用.
[程序]
voidMangers()//管理员登录菜单
{
intn,w=1,flag=0,i=3;
chars[8];
charpassword[7]="123456";
do
{
printf("\n\nEnterpassword:
");
scanf("%s",s);
if(!
strcmp(s,password))//进行密码匹配验证
{
flag=1;
break;
}
else
{
printf("\n\nError!
Youonlyhave%dtimes!
Enteragain:
\n",i-1);
i--;
}
}
while(i>0);
if(!
flag)
{
printf("youhaveEnter3times!
");//输入密码超过了3次!
!
exit(0);//自动退出
}
do
{
system("cls");
puts("\n\n\t\t**************管理员菜单*******************\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---返回主菜单");
puts("\n\n\t\t***********************************************\n");
printf("Chioseyournumber(1-5):
[]\b\b");
scanf("%d",&n);
switch(n)
{
case1:
prin();break;
case2:
search();break;
case3:
insert();savefile();break;
case4:
del();savefile();break;
case5:
return;
default:
;
}
}
while(w==1);
}
(三)学生功能菜单
学生功能菜单包括六个功能:
浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数
[程序]
voidStudents()//学生登录菜单
{
intn,w=1;
do
{
system("cls");
puts("\n\n\t\t************学生菜单**************\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:
prin();break;
case5:
del();savefile1();break;
case6:
return;
default:
;
}
}
while(w==1);
}
(四)创建链表模块
[程序]
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;
}
(五)浏览模块
浏览模块主要用管理员中的”浏览课程”和学生功能中的”浏览所有所有课程”,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出
[程序]
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");
}
(六)查询模块
查询模块主要用于管理员功能中的”查询课程”和学生功能模块中的”查询所有课程”,查询模块共分为三个查询方法:
按课程名称查找,按课程性质查找和按学分查找.switch语句中,每一个case语句就是一中查询方法
[程序]
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);
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;//退出查找
}
}
(七)插入链表模块
插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用
[程序]
void*myInsert(SUB*subj)//链表插入操作
{
SUB*p1,*p2;
p1=subj;
if(head==NULL)
{
head=p1;
head->next=NULL;
}
else
{
for(p2=head;p2;p2=p2->next)
if(p2->next==NULL)
{
p2->next=subj;
subj->next=NULL;
break;
}
}
eturnhead;
}
(八)添加模块
添加模块主要用于增加课程信息,采用链表的操作
[程序]
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继续插入请按回车\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();
}
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(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 学生选修课程系统 学生 选修 课程 系统