学号:
课程设计
题目课程信息的管理与实现
学院计算机科学与技术
专业计算机科学与技术
班级
姓名
指导教师
2012 年7 月 4 日
计算机基础强化训练任务书
学生姓名:专业班级:
指导教师:工作单位:计算机科学与技术学院
题目: 课程信息管理的设计与实现
初始条件:
理论:学完计算机基础知识,掌握C/C++语言编程基础和VC开发平台的使用。
实践:计算机科学系实验中心提供计算机及软件开发环境。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写
等具体要求)
(1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格形式记录。
(2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。要求内存数据用
链表组织,数据文件用文本文件,用户界面用字符界面,枚举量用
枚举类型表示。至少实现数据记录的增加、修改、删除、查询及相
应结果的显示,查询应能按不同数据项进行。
(3)编制好程序后,设计若干测试用例,上机测试并通过所设计的程序系统。
(4)设计报告按格式要求书写。设计报告书正文的内容应包括: 1.系统描述,包括问题说明、数据需求和功能需求;
2.系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计的说明;
3.系统测试,包括测试用例的描述,测试方法和测试结果;
4.设计的特点、不足、收获与体会。
时间安排:
设计安排一周(21—21周(7月6-10日)):
周1上午:指导教师介绍开发平台的使用、文件操作等。
周1下午:完成系统分析、代码设计、文件设计、输入设计、
输出设计、用户界面设计和处理过程设计。
周2-周4:完成程序设计与调试,并撰写设计报告书。
周五全天:设计验收并收取设计报告(第1-8节课到实验中心进行上机验收)。
指导教师签名: 2012 年 6 月 28 日
系主任(或责任教师)签名: 2012 年 6 月 29 日
课程信息管理的设计与实现
1 系统描述
1.1 问题说明
运用所学知识,在内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计的基础上,结合链表组织,数据文件用文本文件,用户界面用字符界面等设计一个课程信息管理系统,包括课程代码、课程名称、上课教室、授课教师、上课时间,并实现对数据记录的增加、修改、删除、查询及相应结果的显示,查询应能按不同的数据项进行。
1.2 功能需求
增加添加课程信息
修改对查找到的课程信息进行修改
删除删除查找到得课程信息
查询按课程代码或课程名称或授课教师查询课程信息初始输入输入初始的课程信息
写入到文件将课程信息写入到文件中保存
从文件读出将保存文件里的信息输出到屏幕中
1.3 数据需求
string 课程代码
string课程名称
string上课教室
string授课教师
string上课时间
2 系统设计
2.1 内存数据结构设计
采用单链表方式来实现
2.1.1 抽象数据类型线性表的定义
typedef struct cnode{ //数据结构,单链表,存储课程相关信息string clanum; //课程编号
string calname; //课程名字
string teaname; //教师名字
string claroom; //上课教室
string clatime; //上课时间
struct cnode *next; //指向下一个节点的指针
}cnode;
2.1.2 基于链表上的各种操作
Cnode* create(cnode *head) //初始化课程信息
Cnode* add(cnode *head) //增加信息
Cnode* delet(cnode *head) //删除信息
Cnode* change(cnode *head) //修改信息
Void find(cnode *head) //查找信息
Void printtxt(cnode *head) //打印到文本文件中
Void read() //从文本文件读取信息
Int menu() //操作选项菜单
2.2 数据文件设计
我们采用C++中文件输出流的方式来对文件进行设计,通过增加、删除等操作创建存储课程信息的单链表,最后通过输入输出流打印所有课程信息,存放在文档classes information.txt中,并可以从中读出信息。
2.3 代码设计
#include
#include
#include
#include
using namespace std;
typedef struct cnode{ //数据结构,存储课程相关信息string clanum;
string calname;
string teaname;
string claroom;
string clatime;
struct cnode *next;
}cnode,*slink;
cnode* create(cnode *head) //初始化课程信息
{
for(int i=0;i!=60;++i) cout<<"-";
cout< cnode *p1,*p2; p2=new cnode; int i; cout<<"输入课程数:"; cin>>i; for(int k=0;k!=i;++k) //for实现依次输入课程信息,课程数i //控制循环停止时间 { for(int i=0;i!=30;++i) cout<<"-"; cout< p1=new cnode; cout<<"输入课程名:"; cin>>p1->calname; cout<<"输入代课老师名:"; cin>>p1->teaname; cout<<"输入教室号:"; cin>>p1->claroom; cout<<"输入上课时间:"; cin>>p1->clatime; cout<<"输入课程编号:"; cin>>p1->clanum; p1->next=NULL; if(head==NULL)head=p1; else p2->next=p1; p2=p1; } for(int i=0;i!=60;++i) cout<<"-"; cout< return head; } cnode* add(cnode *head) //添加课程 { for(int i=0;i!=60;++i) cout<<"-"; cout< cnode *p1,*l; int k; cout<<"要添加的课程数:"; cin>>k; for(l=head;l->next!=NULL;l=l->next){} //找到最后一个节点l,一边 //添加到链表尾部 for(int i=0;i!=k;++i) //for实现依次添加课程信息, //课程数i控制循环停止时间{ for(int i=0;i!=30;++i) cout<<"-"; cout< p1=new cnode; cout<<"输入课程名:"; cin>>p1->calname; cout<<"输入代课老师名:"; cin>>p1->teaname; cout<<"输入教室号:"; cin>>p1->claroom; cout<<"输入上课时间:"; cin>>p1->clatime; cout<<"输入课程编号:"; cin>>p1->clanum; p1->next=NULL; l->next=p1; l=l->next; //始终保持l为最后一个节点} for(int i=0;i!=60;++i) cout<<"-"; cout< return head; } cnode* delet(cnode *head) //删除节点 { for(int i=0;i!=60;++i) cout<<"-"; cout< string declass; cnode *f=head,*bf=head; if(f==NULL) { cout<<"信息不存在,请先创建!"< return head; } int k; cout<<"输入要删除的课程数:"; cin>>k; for(int i=0;i!=k;++i) //控制删除次数 { for(int i=0;i!=30;++i) cout<<"-"; cout< cout<<"要删除的课程名:"; cin>>declass; while(f->calname!=declass&&f->next!=NULL) //找到要删除的节点 { bf=f; f=f->next; } if(f->calname==declass) { if(f==head)head=f->next; else bf->next=f->next; } else cout<<"您要删除的课程不存在!"< } for(int i=0;i!=60;++i) cout<<"-"; cout< return head; } cnode* change(cnode *head) //修改函数 { for(int i=0;i!=60;++i) cout<<"-"; cout< string chgclass; cnode *f=head; if(f==NULL) { cout<<"信息不存在,请先创建!"< return head; } cout<<"输入要更改的课程:"; cin>>chgclass; while(f->calname!=chgclass&&f->next!=NULL) { f=f->next; } if(f->calname==chgclass) { for(int i=0;i!=40;++i) cout<<"-"; cout< cout<<"要更改的信息:"< cout<<"(1) 课程名;"< cout<<"(2) 代课老师;"< cout<<"(3) 上课教室;"< cout<<"(4) 上课时间;"< cout<<"(5) 课程编号;"< for(int i=0;i!=40;++i) cout<<"-"; cout< int i; cout<<"输入要更改的选项:"; cin>>i; switch(i) { case 1:cout<<"课程名:";cin>>f->calname;break; case 2:cout<<"老师:";cin>>f->teaname;break; case 3:cout<<"教室:";cin>>f->claroom;break; case 4:cout<<"时间:";cin>>f->clatime;break; case 5:cout<<"编号:";cin>>f->clanum;break; default:cout<<"错误的选项!"< } } else cout<<"要更改的课程不存在!"< for(int i=0;i!=60;++i) cout<<"-"; cout< return head; } void find(cnode *head) //查找函数 { for(int i=0;i!=60;++i) cout<<"-"; cout< cnode *f=head; if(f==NULL) { cout<<"信息不存在,请先创建!"< return; } for(int i=0;i!=40;++i) cout<<"-"; cout< cout<<"查询项目:"< cout<<"(2) 按代课老师查询;"< cout<<"(3) 按课程编号查询;"< for(int i=0;i!=40;++i) cout<<"-"; cout< int i; cout<<"选择查询方式:"; cin>>i; string find; switch(i) { case 1:cout<<"课程名:"; cin>>find; while(f->calname!=find&&f->next!=NULL) { f=f->next; } if(f->calname==find) cout<<"编号为"< < <<"在教室"< < else cout<<"您要查找的信息不存在!"< case 2:cout<<"老师:";cin>>find; while(f->teaname!=find&&f->next!=NULL) { f=f->next; } if(f->teaname==find) cout<<"编号为"< < <<"在教室"< < else cout<<"您要查找的信息不存在!"< case 3:cout<<"编号:";cin>>find; while(f->clanum!=find&&f->next!=NULL) { f=f->next; } if(f->clanum==find) cout<<"编号为"< < <<"在教室"< < else cout<<"您要查找的信息不存在!"< default:cout<<"错误的选项!"< } for(int i=0;i!=60;++i) cout<<"-"; cout< } void printtxt(cnode *head) //输出到文件中 { if(head==NULL) {cout<<"空信息,打印失败!"< fstream ci; //以写方式打开文件,如果不存在则创建,打开文件时删除旧信息。 ci.open ("Classes Information.txt",ios::out|ios::trunc); if(!ci) { cout<<"写文件打开失败!"< return; } for(int i=0;i!=28;++i) ci<<"--";ci< ci<<"|"< <<"课程|"< <<"教室|"< for(int i=0;i!=28;++i) ci<<"--";ci< for(cnode *p=head;;p=p->next) { ci<<"|"< < < < < for(int i=0;i!=28;++i) ci<<"--";ci< if(p->next==NULL)break; } ci.close(); } void read() { ifstream co("Classes Information.txt"); if(!co) { cout<<"读文件打开失败!"< return; } string write; while(getline(co,write)) cout< co.close(); } int menu() { cout<<"\n\n"< for(int i=0;i!=80;++i) cout<<"*"; cout< cout<<"[1] 输入课程信息;"< cout<<"[2] 增加课程信息;"< cout<<"[3] 修改课程信息;"< cout<<"[4] 删除课程信息;"< cout<<"[5] 查找课程信息;"< cout<<"[6] 打印到文本中;"< cout<<"[7] 从文本中读入;"< cout<<"[8] 退出课程管理;\n"< for(int i=0;i!=80;++i) cout<<"*"; cout< int k; cout<<"选择一项操作,输入其标号:"; cin>>k; return k; } int main() { cnode *head; head=NULL; int k; k=menu(); while(k!=8) { switch(k) { case 1:head=create(head);break; case 2:head=add(head);break; case 3:head=change(head);break; case 4:head=delet(head);break; case 5:find(head);break; case 6:printtxt(head);break; case 7:read();break; default:cout<<"错误操作,请重新输入!"< } k=menu(); } return 0; } 2.4 输入输出设计 调用创建函数在dos界面下进行输入,创建单链表用来存储课程信息,增加,删除,改变函数进行数据操作,最后将课程信息打印到Classes Information.txt 中,并需能从该文件中将信息读出到显示屏中。 2.5 用户界面设计 利用C++中I/O格式化,设计用户界面如下图所示: 2.6处理过程设计 通过循环语句使菜单界面循环显示,每次执行命令完后都会显示菜单界面,知道选择退出命令,系统停止后不再显示,并且加入了刷屏函数,不至于在界面上出现过多的信息,使界面更加简洁,明了。 3 系统测试 3.1 测试用例描述 输入课程信息如下表: 1001 数据结构5-504 刘春周二1,2节 1003 通信原理5-205 许毅周四3,4节 1005 概论1-103 王盛周五5,6节 添加课程信息如下: 1007 军事理论5-401 王希征周四1,2节 查看课程信息: 分别以课程编号、课程名称和授课教师查询,选取的实例如下: 1001 数据结构5-504 刘春周二1,2节 修改课程信息:将1003号中的上课时间由“周四3,4节”换为“周四1,2节”删除课程信息,删除1005号课程信息; 最后将操作完毕后的课程信息打印出来。 3.2 测试方法和测试结果 输入初始课程信息: 查看课程信息:(这里采用选取编号查看,另外两种查看方式得出的结果一样) 修改课程信息: 删除课程信息: 打印课程信息: Classes information。txt文件中的信息: 从文件中读出信息: 4 小结与体会 本次实验是课程信息管理系统的设计与实现。程序中用链表做存储结构能够实现课程信息的插入、查询、修改以及删除等操作,并且运用C++中的文件输入输出流来实现对文件信息的存储,基本上能够实现所要求的功能。但不足的是,作为一个管理系统,应该有用户界面和管理员界面之分,并且在登录系统时,为了保证安全还应该设置登录密码,另外实现的管理界面不是很美观。 本科生课程设计成绩评定表 班级:姓名学号 序号评分项目满分实得分 1 问题分析清楚、合理、完整10 2 设计方案正确,可行性、独创性20 3 设计结果(分析模型、设计模型、软 件程序) 20 4 态度认真、学习刻苦、遵守纪律15 5 设计报告的规范化、参考文献充分 (不少于5篇) 10 6 验收答辩25 总得分/等 级 评语: 注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格 指导教师签名: 201 年月日