收藏 分销(赏)

c语言课程设计--图书管理系统.docx

上传人:人****来 文档编号:4783902 上传时间:2024-10-12 格式:DOCX 页数:23 大小:176.68KB 下载积分:10 金币
下载 相关 举报
c语言课程设计--图书管理系统.docx_第1页
第1页 / 共23页
c语言课程设计--图书管理系统.docx_第2页
第2页 / 共23页


点击查看更多>>
资源描述
内蒙古科技大学课程设计说明书 内蒙古科技大学 本科生课程设计说明书 题 目:C语言课程设计 —— 图书管理系统 学生姓名: 学 号: 专 业:软件工程 班 级:软件一班 指导教师: 日 期: 2016 年 1月 3 日 22 内蒙古科技大学课程设计任务书 课程名称 C语言课程设计 设计题目 图书管理系统 指导教师 时间 2016.1.5——2016.1.9 一、教学要求 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 学生选修课程管理系统设计 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: v 课程信息录入功能(课程信息用文件保存)--输入;课程信息浏览功能--输出 v 查询功能:(至少一种查询方式)--算法 ●按学分查询 ●按课程名称查询 v 学生选修课程(可选项) 三、设计要求及成果 1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目) 2. 写出详细设计说明(至少包括功能实现分析和模块流程图) 3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号) 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告(请严格按照模板进行排版) 四、进度安排 第一天  选择课程设计题目,分析课题的要求 第二天  编程 第三天  编程及调试 第四天  写课程设计报告 第五天  提交课程设计报告(打印稿及电子稿) 五、评分标准 1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 目 录 内蒙古科技大学课程设计任务书 I 第一章 需求分析 3 1.1 引言 3 1.2 任务概述 3 1.3 数据描述 3 1.4 功能需求 3 1.5 任务计划 4 第二章 概要设计 5 2.1 总体设计 5 2.2 数据类型设计(或数据结构设计) 5 2.3 接口设计 //函数声明 6 2.4 运行界面设计 6 第三章 详细设计 7 3.1 输入模块设计 7 3.2 输出模块设计 7 3. 3 查找模块设计 7 3.4 排序模块设计 7 3.5 保存及读取模块设计 7 第四章 测试分析 8 4.1 测试程序执行情况 8 4.2 出现的问题和解决的方法 9 第五章 课程设计总结 12 参考文献 12 致谢 13 附录:程序代码 14 第一章 需求分析 1.1 引言 随着图书馆里图书数量的增多,图书管理管理变得越来越困难,为了方便学校对图书借阅的管理,一个简易的图书管理管理系统可以解决一些简单的问题 1.2 任务概述 v 图书信息录入功能(图书信息用文件保存)--输入 v 图书信息浏览功能--输出 v 查询或排序功能:(至少两种种查询方式)--算法 ●按书名查询 ●按作者名查询 v 图书信息的删除与修改 v 图书的借出与归还 1.3 数据描述 需要输入的数据包括登录号、书名、作者名、分类号、出版单位、出版时间、价格等。系统会自动处理图书的借出与归还。 1.4 功能需求 图书管理系统需要实现以下功能; 1. 图书信息录入功能(图书信息用文件保存)--输入 2. 图书信息浏览功能—输出 3. 查询或排序功能:(至少两种查询方式)--算法 按书名查询 按作者查询 4. 图书信息的删除与修改 5. 图书的借出与归还 1.5 程序功能简介 本系统是C语言开发的一个图书管理系统。本系统具有图书信息录入、浏览、删除、修改、查找(包括按书名、作者查找)功能。其中图书信息包括登录号、书名、作者名、分类号、出版单位、出版时间、价格,并且对信息以文件形式储存。另外本系统具备实用性的同时代码逻辑谨慎清晰易懂,且界面美观 第二章 概要设计 2.1 总体设计 选择功能色 图书的借出与归还 v 图图图书信息的删除与修改 v 信息的删除与修改 v 书信息的删除与修改 查询或排序功能 图书信息浏览功能 图书信息录入功能 图书信息的删除与修改 系统运行 按作者名查询 按书名查询 2.2 数据类型设计(或数据结构设计) 1. 数据以顺序结构储存 2.3 接口设计 //函数声明 可参考用以下表格形式: 表2.1:函数列表 函数名 函数格式 //即函数首部 main int main() int num; /*登录号*/ char name[100]; /*书名*/  char author[100]; /*作者名*/ char fn[100]; /*分类号*/ char place[100]; /*出版单位*/ char day[100]; /*出版时间*/ float money; /*价格*/ main() /*主函数*/ void Input(); /*输入*/ void Display(); /*输出*/ void Find(); /*查找*/ void Modify(); /*删除*/ void Change(); /*修改*/ 2.4 运行界面设计 第三章 详细设计 3.1 输入模块设计 void BOOK::input() //定义成员函数input(),用于输入图书信息 { cout<<"\n\t\t 输入书名:";cin>>name; cout<<"\n\t\t 输入作者:";cin>>author; cout<<"\n\t\t 输入分类号:";cin>>sort; cout<<"\n\t\t 输入出版单位:";cin>>publish; cout<<"\n\t\t 输入出版时间:";cin>>pub_year; cout<<"\n\t\t 输入价格(小数):";cin>>price; cout<<"\n\t\t ******输入完成******\n"; } 第四章 测试分析 4.1 测试程序执行情况 能按照正确操作实现已加入的各个功能,一些部分添加了报错的功能,如选择1-n中的一个数字。 界面 ;录入 新增 浏览 查询 修改 删除 第五章 课程设计总结 经过一个多星期的编译原理课程设计,在我的努力下,顺利完成该课程设计。 通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。 课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。 参考文献 1.《C语言程序设计》,谭浩强,清华大学出版社 2.《C语言程序设计课程设计》,刘振安,机械工业出版 致谢 宇松 #include<fstream.h> #include<string> class BOOK //定义一个BOOK类,包含7个公有数据成员和2个成员函数 { public: int login;char name[20];char author[20];char sort[20];char publish[20];char pub_year[20]; float price; void input(); //成员函数声明 void output(); }; void BOOK::input() //定义成员函数input(),用于输入图书信息 { cout<<"\n\t\t 输入书名:";cin>>name; cout<<"\n\t\t 输入作者:";cin>>author; cout<<"\n\t\t 输入分类号:";cin>>sort; cout<<"\n\t\t 输入出版单位:";cin>>publish; cout<<"\n\t\t 输入出版时间:";cin>>pub_year; cout<<"\n\t\t 输入价格(小数):";cin>>price; cout<<"\n\t\t ******输入完成******\n"; } void BOOK::output() //定义成员函数output(),用于输出图书信息 { cout<<"\n\t\t 登录号:"<<login<<"\n"; cout<<"\n\t\t 书名:"<<name<<"\n"; cout<<"\n\t\t 作者:"<<author<<"\n"; cout<<"\n\t\t 分类号:"<<sort<<"\n"; cout<<"\n\t\t 出版单位:"<<publish<<"\n"; cout<<"\n\t\t 出版时间:"<<pub_year<<"\n"; cout<<"\n\t\t 价格:"<<price<<"元\n\n"; } void screen(); //自定义函数screen()的声明,该函数用于显示系统主菜单 int count() //count()用于计算文件中存储有几本书的信息 { ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate); infile.seekg(0,ios::end); //文件指针移到文件尾 return infile.tellg()/sizeof(BOOK); } void luru() //luru():实现书目信息录入 { char p; cout<<"\n\t\t 执行录入功能会删除系统中原有信息,是否继续?(Y\\N)"; cin>>p; if(p=='y'||p=='Y') { BOOK bo;int i=0; ofstream outfile("book_information.dat",ios::out|ios::binary); //ios::out会删除文件原有数据 if (!outfile) { cout<<"\n\t\t 文件打开错误!"; return; } do { cout<<"\n\n"; i=i+1;bo.login=i;//第一本书的登录号(bo.login)为1,随循环顺次增加 cout<<"\t\t 第"<<bo.login<<"本书\n"; bo.input(); outfile.write((char*)&bo,sizeof(bo)); cout<<"\n\t\t 是否继续录入新书信息?(Y\\N)"; cin>>p; } while(p=='y'||p=='Y'); outfile.close(); } screen(); //函数结束,返回主菜单 } void xinzeng() //xinzeng():增加书目信息 { BOOK bo; ofstream outfile("book_information.dat",ios::out|ios::binary|ios::app); if (!outfile) { cout<<"\n\t\t 文件打开错误!"; return; } bo.login=count()+1; //录入新书时,计算对应的登录号 cout<<"\n\n\t\t 第"<<bo.login<<"本书\n"; bo.input(); outfile.write((char*)&bo,sizeof(bo)); outfile.close(); screen(); //函数结束,返回主菜单 } void liulan() //liulan():浏览所有书目信息 { BOOK bo; ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate); if(!infile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } infile.seekg(0,ios::end);//文件指针移到文件尾 if(!infile.tellg()) //判断文件内信息是否为空 cout<<"\n\t\t 系统内图书信息为空!"; else { infile.seekg(0,ios::beg); //文件指针回到文件头 for(int j=1;j<=count();j++) { infile.read((char*)&bo,sizeof(bo)); bo.output(); } } screen(); //函数结束,返回主菜单 } void chaxun(); //后面的by_name()和by_author()会调用chaxun(),所以须添加函数声明 void by_name() //by_name():按书名查找并输出 { cout<<"\n\t\t 输入书名:"; char a[20];cin>>a; BOOK bo; ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate); if(!infile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } int i=count(),k=0; //i存储文件中书的数量,k用于判断所查的文件名是否存在 for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(a,bo.name)!=0) //比较输入的文件名和文件中存储的文件名 k++; //当两文件名不相同时,k自增1,否则不变 } if(k==i) //若k=i,说明文件中没有一个文件名与输入的相同,即所查的文件名不存在 { cout<<"\n\t\t 没有找到该书目!\n"; } else { infile.seekg(0); cout<<"\n\n"; for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(a,bo.name)==0) //找到文件名,输出对应的信息 { bo.output(); } } } infile.close(); cout<<"\n\t\t 是否继续查询?(Y\\N)"; char p;cin>>p; if(p=='y'||p=='Y') by_name(); else chaxun(); //结束查询,返回子菜单 } void by_author() //按作者查找并输出 { cout<<"\n\t\t 输入作者:"; char b[20];cin>>b; BOOK bo; ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate); if(!infile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } int i=count(),k=0; for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(b,bo.author)!=0) k++; } if(k==i) { cout<<"\n\t\t 没有找到该作者!\n"; } else { infile.seekg(0); cout<<"\n\n"; for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(b,bo.author)==0) { bo.output(); } } } infile.close(); cout<<"\n\t\t 是否继续查询?(Y\\N)"; char p;cin>>p; if(p=='y'||p=='Y') by_author(); else chaxun(); } void chaxun() //chaxun():建立查询子菜单 { cout<<"\n\n"; cout<<"\t\t\t\t1 按 书 名\n\n"; cout<<"\t\t\t\t2 按 作 者\n\n"; cout<<"\t\t\t\t0 返 回\n\n"; cout<<"\t\t 请选择(0-2):"; int option1;cin>>option1; switch(option1) { case 1:by_name();break; case 2:by_author();break; case 0:screen();break; default:cout<<"\n\t\t 输入错误,请重新输入:"; chaxun(); } } void xiugai() //xiugai():修改书目信息 { BOOK bo; fstream mfile("book_information.dat",ios::in|ios::out|ios::binary|ios::nocreate); if(!mfile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } cout<<"\n\n\t\t 输入书目登录号:";int c;cin>>c; //按登录号查询 if(c>=1&&c<=count())//判断登录号是否存在 { mfile.seekg((c-1)*sizeof(bo)); //文件指针移到开始修改的位置 mfile.read((char*)&bo,sizeof(bo)); char p; cout<<"\n\t\t 是否修改书名?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入书名:";cin>>bo.name; } cout<<"\n\t\t 是否修改作者?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入作者:";cin>>bo.author; } cout<<"\n\t\t 是否修改分类号?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入分类号:";cin>>bo.sort; } cout<<"\n\t\t 是否修改出版单位?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入出版单位:";cin>>bo.publish; } cout<<"\n\t\t 是否修改出版时间?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入出版时间:";cin>>bo.pub_year; } cout<<"\n\t\t 是否修改价格?(Y\\N)";cin>>p; if(p=='y'||p=='Y') { cout<<"\n\t\t 输入价格:";cin>>bo.price; } mfile.seekg((c-1)*sizeof(bo)); //文件指针移回开始修改的位置 mfile.write((char*)&bo,sizeof(bo)); //重新写入该书目信息 cout<<"\n\t\t ******修改成功******\n"; } else { cout<<"\n\t\t 登录号不存在!\n"; } mfile.close(); screen(); //函数结束,返回主菜单 } void shanchu() //删除书目信息 { BOOK bo;char a[20]; cout<<"\n\n\t\t 输入要删除的书目:";cin>>a; ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate); if(!infile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } fstream mfile("book_information2.dat",ios::out|ios::in|ios::binary); //建立名为book_information2的中间文件,存储除被删除书目以外的书目信息 if (!mfile) { cout<<"\n\t\t 文件打开错误!"; return; } int i=count(),k=0; for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(a,bo.name)!=0) //比较输入的文件名和文件中存储的文件名 k++; //当两文件名不相同时,k自增1,否则不变 } if(k==i) //若k=i,说明文件中没有一个文件名与输入的相同,即所查的文件名不存在 { cout<<"\n\t\t 没有找到该书目!\n"; infile.close(); mfile.close(); } else { infile.seekg(0,ios::beg); for(int j=1;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); if(strcmp(a,bo.name)!=0) //如果文件名不相同,则把信息复制到book_information2.dat中 { mfile.write((char*)&bo,sizeof(bo)); } else break; //如果文件名相同,则不复制信息,直接跳出循环 } for(j++;j<=i;j++) { infile.read((char*)&bo,sizeof(bo)); bo.login=bo.login-1; mfile.write((char*)&bo,sizeof(bo)); } infile.close(); ofstream outfile("book_information.dat",ios::out|ios::binary); //建立重名文件,清空原有信息 if (!outfile) { cout<<"\n\t\t 文件打开错误!"; return; } mfile.seekg(0,ios::beg); //文件指针移到文件头 for(j=1;j<i;j++) { mfile.read((char*)&bo,sizeof(bo)); //将book_information2.dat中的信息复制到book_information.dat outfile.write((char*)&bo,sizeof(bo)); } mfile.close(); outfile.close(); cout<<"\n\t\t ******删除成功******\n"; } screen(); } void quanshan() //quanshan():删除文件中全部信息 { ifstream infile("book_information.dat",ios::in|ios::binary|ios::nocreate|ios::trunc); if(!infile) { cout<<"\n\t\t 打开输入文件出错!\n"; return; } infile.close(); cout<<"\n\t\t ******全删成功******\n"; screen(); } void screen() //显示主界面 { cout<<"\n\n\t\t\t 图 书 信 息 管 理 系 统\n\n\n"; cout<<"\t\t\t\t 1 录 入\n\n"; cout<<"\t\t\t\t 2 新 增\n\n"; cout<<"\t\t\t\t 3 浏 览\n\n"; cout<<"\t\t\t\t 4 查 询\n\n"; cout<<"\t\t\t\t 5 修 改\n\n"; cout<<"\t\t\t\t 6 删 除\n\n"; cout<<"\t\t\t\t 7 全 删\n\n"; cout<<"\t\t\t\t 0 退 出\n\n"; cout<<"\t\t 请选择(0-7):"; int option;cin>>option; switch(option) { case 1:luru();break; case 2:xinzeng();break; case 3:liulan();break; case 4:chaxun();break; case 5:xiugai();break; case 6:shanchu();break; case 7:quanshan();break; case 0:return; default:cout<<"\n\t\t 输入错误,请重新输入:"; screen(); } } void main() { screen(); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服