一、课程设计的内容 图书管理系统
功能描述
1、新进图书基本信息的输入。
2. 图书基本信息的查询。
3. 对撤消图书信息的删除。 4. 为借书人办理注册。
5.办理借书手续(非注册会员不能借书)。 6.办理还书手续
信息描述:有关该系统基本信息的描述,如:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等
二、课程设计的要求与数据
1、进一步掌握和利用C语言进行程设计的能力; 2、进一步理解和运用结构化程序设计的思想和方法; 3、初步掌握开发一个小型实用系统的基本方法; 4、学会调试一个较长程序的基本方法; 5、学会利用流程图或N-S图表示算法; 6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作
1、编写完成相应题目的程序;
2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:
1) 需求分析:包括设计题目、设计要求以及系统功能需求分析; 2) 总体设计:包括系统总体设计框架和系统功能模块图;
3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图; 4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);
5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;
6) 附录:主要源程序代码,含必要的注释。
3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解 决问题、运行程序和回答教师提出的问题。
四、课程设计进程安排
序号 1 2 3 4 设计各阶段内容 下达任务书,说明设计要求;收集资料 总体方案设计、详细设计 编写程序,调试分析 撰写报告并上交,答辩 地点 实验3#517 实验3#517 实验3#517 实验3#517 起止日期 6.18 6.19 6.20 6.21 五、应收集的资料及主要参考文献
[1] 谭浩强.C程序设计(第三版)[M],北京:清华大学出版社,2005.9
[2] 谭浩强. C程序设计题解与上机指导(第三版)[M],北京:清华大学出版社,2005.7
[3] 张宏烈C语言程序设计方法 哈尔滨工业大学出版社 2004.02 [4 ] 胡建平 C语言程序设计学习指导书 天津大学出版社 2005-8-1
发出任务书日期: 2007年 6 月 18 日 指导教师签名:
计划完成日期: 2007年 6 月 22 日 基层教学单位责任人签章:
主管院长签章:
目 录
1 设计目的与要求………………………………………………………………页码 2 总体设计………………………………………………………………………页码
3 详细设计………………………………………………………………………页码 3.1功能模块设计………………………………………………………………页码
3.1.1 XX功能模块(可选) …………………………………………………页码 3.1.1 YY功能模块(可选) …………………………………………………页码 3.1.1 ZZ功能模块(可选)…………………………………………………页码 3.2数据结构设计………………………………………………………………页码
4调试分析 ……………………………………………………………………页码 5 总结……………………………………………………………………………页码 6 附录……………………………………………………………………………页码 6 答辩记录(正文处请留出适当空白) ………………………………………页码 7 指导教师意见(正文处请留出十行空白) …………………………………页码
1 目的与要求
1. 课程设计的目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际应用问题进行有机结合,锻炼学生分析、解决实际问题的能力,提高学生项目开发及程序调试能力。
2. 课程设计的内容及要求
利用学到的编程知识和编程技巧,通过布置具有一定难度的程序设计题目,帮助学生熟悉程序编写,及时查究错误,独立完成。
2)总体要求
①对系统进行功能模块分析、控制模块分析正确; ②系统设计要实用;
③编程简练,可用,功能全面,具有较好的健壮性;
④说明书、流程图要清楚。
(3)课程设计报告要求
①需求和规格说明:问题描述:题目要解决的问题是什么?
②设计
⊕设计思路:主要算法思想。
⊕总体设计:程序设计组成框图、N-S流程图。
⊕详细设计:模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描
述等)。
③调试与测试:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论
和分析;改进设想;经验和体会等。
④附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和
运行输出,当然还可以含其他测试数据和运行输出;清单中应有足够的注释。
2 总体设计
1读者类,实现对读者的信息的描述 2读者类库,实现建立读者的个人资料
3图书类,实现对图书的描述,图书的编号,书名,借出,还入等 4图书库类,实现对图书的维护,查找,删除等
3 详细设计
(内容可以适当调整,清晰的有条理的把你的设计思路表达出来)
3.1功能模块设计
3.1.1 XX功能模块(可选)
3.1.2 YY功能模块(可选)
3.1.3 ZZ功能模块(可选)
3.2数据结构设计(可选)
#include #include const int Maxr=10000;//最多的读者 const int Maxb=10000;//最多的图书 const int Maxbor=7;//每位读者最多借五本书 class Reader { private: int tag; //删除标记 1:已删 0:未删 int no; //读者编号 char name[10]; //读者姓名 int borbook[Maxbor];//所借图书 public: Reader() {} char *getname() {return name;} //获取姓名 int gettag() {return tag;} //获取删除标记 int getno() {return no;} //获取读者编号 void setname(char na[]) //设置姓名 { strcpy(name,na); } void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删 void addreader(int n,char *na)//增加读者 { tag=0; no=n; strcpy(name,na); for(int i=0;i void borrowbook(int bookid)//借书操作 { for(int i=0;i borbook[i]=bookid; return; } } } int retbook(int bookid)//还书操作 { for(int i=0;i { borbook[i]=0; return 1; } } return 0; } void disp()//读出读者信息 { cout << setw(5) << no < int top; //读者记录指针 Reader read[Maxr];//读者记录 public: RDatabase() //构造函数,将reader.txt读到read[]中 { Reader s; top=-1; fstream file(\"reader.txt\打开一个输入文件 while (1) { file.read((char *)&s,sizeof(s)); if (!file)break; top++; read[top]=s; } file.close(); //关闭 reader.txt } void clear()//删除所有读者信息 { top=-1; } int addreader(int n,char *na)//添加读者时先查找是否存在 { Reader *p=query(n); if (p==NULL) { top++; read[top].addreader(n,na); return 1; } return 0; } Reader *query(int readerid)//按编号查找 { for (int i=0;i<=top;i++) if (read[i].getno()==readerid && read[i].gettag()==0) { return &read[i]; } return NULL; } void disp() //输出所有读者信息 { for (int i=0;i<=top;i++) read[i].disp(); } void readerdata();//读者库维护 ~RDatabase() //析构函数,将read[]写到reader.txt文件中 { fstream file(\"reader.txt\ for (int i=0;i<=top;i++) if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i])); file.close(); } }; void RDatabase::readerdata() { char choice; char rname[20]; int readerid; Reader *r; while (choice!='0') { cout <<\"\\n\\n\\\读 者 维 护\\n\\n\\n\\ 1 新 增\\n\\n\\ 2 更改\\n\\n\\ 3 删 除\\n\\n\\ 4 查 找\\n\\n\\ 5 显 示\\n\\n\\ 6 全 删\\n\\n\\ 0 退出\"< cout << \"输入读者编号:\"; cin >> readerid; cout << \"输入读者姓名:\"; cin >> rname; addreader (readerid,rname); break; case '2': cout << \"输入读者编号:\"; cin >> readerid; r=query(readerid); if (r==NULL) { cout << \" 该读者不存在 \"< cout << \" 输入读者编号:\"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<\" 该读者不存在\" << endl; break; } r->delbook(); break; case '4': cout << \"读入读者编号:\"; cin >> readerid; r=query(readerid); if (r==NULL) { cout <<\"该读者不存在\"<< endl; break; } r->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<\"输入错误,请从新输入:\";break; } } } class Book { private: int tag;//删除标记 1:已删 0:未删 int no;//图书编号 char name[20];//书名 int onshelf;//是否再架 1:再架 2:已借 public: Book(){} char *getname() { return name; }//获取姓名 int getno(){ return no; }//获取图书编号 int gettag(){ return tag; }//获取删除标记 void setname(char na[])//设置书名 { strcpy(name,na); } void delbook(){ tag=1;}//删除图书 void addbook(int n,char *na)//增加图书 { tag=0; no=n; strcpy(name,na); onshelf=1; } int borrowbook()//借书操作 { if (onshelf==1) { onshelf=0; return 1; } return 0; } void retbook()//还书操作 { onshelf=1; } void disp()//输出图书 { cout << setw(6) << no << setw(18) << name << setw(10) <<(onshelf==1? \"在架\":\"已借\") < int top; //图书记录指针 Book book[Maxb]; //图书记录 public: BDatabase()//构造函数,将book.txt读到book[]中 { Book b; top=-1; fstream file(\"book.txt\ while (1) { file.read((char *)&b,sizeof(b)); if (!file) break; top++; book[top]=b; } file.close(); } void clear()//全删 { top=-1; } int addbook(int n,char *na)//增加图书 { Book *p=query(n); if (NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } Book *query(int bookid)//查找图书 { for (int i=0;i<=top;i++) if (book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } void bookdata();//图书库维护 void disp() { for (int i=0;i<=top;i++) if (book[i].gettag()==0) book[i].disp(); } ~BDatabase()//析构函数,将book[]写到book.txt文件中 { fstream file(\"book.txt\ for (int i=0;i<=top;i++) if (book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; void BDatabase::bookdata() { char choice; char bname[40]; int bookid; Book *b; while (choice!='0') { cout <<\"\\n\\n\\n\\\图 书 维 护 \"< cout << \"输入图书编号:\"< cout << \"输入图书书名:\"< addbook(bookid,bname); break; case '2': cout << \"输入图书编号:\"< if (b==NULL) { cout << \" 该图书不存在 \"< cout <<\" 读入图书编号:\"< cout <<\" 该图书不存在\" << endl; break; } b->delbook(); break; case '4': cout << \" 读入图书编号:\"< cout <<\" 该图书不存在\"<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<\"输入错误,请从新输入:\"; } } } void main() { char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout < cout <<\" 借书 读者编号:\"; cin >>readerid; cout <<\" 图书编号: \"; cin >>bookid; r=ReaderDB.query(readerid);//按编号查找 if (NULL==r) { cout <<\" 不存在该读者,不能借书\"<< endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<\" 不存在该图书,不能借书\"<< endl; break; } if (b->borrowbook()==0) { cout << \" 该图书已借出,不能借书\"<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<\"还书\\n 读者编号:\"; cin >>readerid; cout << \" 图书编号:\"; cin >>bookid; r=ReaderDB.query(readerid); if (r==NULL) { cout <<\" 不存在该读者,不能还书\" << endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <<\" 不存在该图书,不能还书\" < r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<\"输入错误,请从新输入:\"; } } } 4 调试分析 编译结果:图书管理系统1.obj - 0 error(s), 0 warning(s) 运行结果: 图书管理系统 1借书 2 还书 3图书维护 4读者维护 0 离开 等待输入 一切正常 5 总 结 用C可以各种问题,但是在写程序时需要耐心,还要查阅许多资料。 通过这次课程设计,我有信心可以学好C语7.附录 7.附录 7 答辩记录 序号 问 题 回 答 1 2 3 4 5 8 指导教师意见 指导教师签名: 因篇幅问题不能全部显示,请点此查看更多更全内容