C#程序设计课设报告Word下载.docx
《C#程序设计课设报告Word下载.docx》由会员分享,可在线阅读,更多相关《C#程序设计课设报告Word下载.docx(30页珍藏版)》请在冰豆网上搜索。
3、图书管理系统程序
1、浏览书籍信息2、修改书籍信息3、统计书记情况4、查询书的基本信息5、录入新书信息
1、输入教师信息2、查看教师信息3、清空记录4、退出程序
课程设计报告规范
1、完成系统需求分析:
包括系统设计目的与意义;
系统功能需求;
输入输出的要求。
2、完成系统概要设计:
程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;
每个模块的功能;
课题涉及的数据结构和数据库结构;
即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
3、完成系统详细设计:
包括采用C++语言定义相关的数据类型;
写出各模块的类C++码算法;
画出函数的调用关系图。
4、调试分析、设计体会、测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;
程序调试中遇到的问题以及解决问题的方法;
课程设计过程经验教训、心得体会。
5、关键源程序(带注释)
6、其他
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6)上机演示。
二、进度安排
第16周星期一14时:
00分
星期二14时:
00分
星期四14时:
星期五14时:
第17周星期一14时:
1系统需求分析
1.1系统设计目的与意义
1.2系统功能需求
利用C++语言和access数据库的相关知识设计与开发一个图书管理系统的借书模块、还书模块和图书存储模块,具有读者编号、读者信息、书籍编号、书籍信息的输入功能;
可以在数据库中查询和删除所保存的记录;
在借书功能里,用户可以通过此功能是否借出检索的书籍,还书功能里,读者可以查看所接书籍信息,并具有退出该系统模块的功能。
1.3输入输出要求
本系统是一个图书信息管理系统,采用VC++6.0编译器作为开发环境,这个环境是我们在学习的C++平台。
输入数据类型主要是char、int、float等数据类型,输入内容包括:
图书编号、图书名、读者编号、读者名等数据。
用户在输入图书信息保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确可用。
输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,还可以修改、删除、查找、显示所有、保存等功能。
2总体设计
2.1总体设计图
本管理系统共分为五大功能:
分别为借书功能、还书功能、图书维护、读者维护、退出系统,系统设置模块各功能性需求见下表所示由图2.1所示
图2.1总体设计图
2.2各函数之间的调用关系
该模块完成了图书管理系统中新增图书、查询图书、删除图书信息、借书、还书以及读者信息录入的功能,其中在图书维护模块的功能中,又可实现新增图书、更改图书信息、删除图书、查询图书、显示全部图书、删除全部图书的功能。
同样在读者维护模块中也有类似的新增读者、更改读者信息、删除读者、查询读者信息等功能。
流程图如图2.2所示。
1.新增读者
1.更改读者信息
2.删除读者
3.查询读者
4.显示全部读者
5.删除全部读者
6.退出
图2.2各函数之间的调用关系
2.3数据结构及数据库
数据结构是指同一数据元素类中各数据元素之间存在的关系。
数据结构分别为逻辑结构、存储结构和数据的运算。
数据的逻辑结构是从具体问题抽象出来的数学模型,是描述数据元素及其关系的数学特性的,有时就把逻辑结构简称为数据结构。
而数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
图书管理系统程序利用C++语言编写,定义多个类,数据保存到access数据库实现数据保存和查询。
Access数据库中存储了输入的图书信息,读者信息以及图书的借阅情况。
2.4C#语言的简介
C#语言是在C、C++和Java基础上重新构造的、语法与C++和Java都比较相似的基于。
NET框架支持的一种完全面向对象的、类型安全的编程语言,也是。
NET的首选编程语言。
从开发效率来讲,C#为应用程序开发人员提供了快速的开发手段,但又不牺牲C++语言的特点和优点。
从继承性来讲,C#在更高层次上重新实现了C和C++。
从语法形式和易用性来讲,C#几乎综合了目前流行的所有高级语言的优点,提供了一种语法优雅、功能完善而又容易使用的外在表现形式。
3详细设计
3.1采用C++语言定义的相关数据类型
C/C++数据类型C语言包含5个基本数据类型:
void空类型、int整型、float浮点类型、double双精度浮点类型、char字符类型,在图书管理系统这个程序中用到了其中的大多数。
同时还用类和对象的方法来定义多个类,在这之前,曾采用结构体的方法来做个,但后来放弃了,因为采用数组或者结构体的方法定义多个事件,那样将会非常繁琐,代码重复比较大,因此,为了简化这些连接操作,在开发时设计个可重用的类,把对数据库的操作都封装在这个类中,需要用到时生成对象调用便可。
这样就避免了在出现错误时,为了去修改错误而产生的庞大的工作量。
3.2各模块的类C码算法
3.2.1采用类建立一个读者类,实现对读者信息的描述
根据课设要求定义一个读者类,在类中,定义了读者的编号、姓名,建立数组来存储读者所借阅的书籍,同时也建立多个成员函数像addreade()、borrowbook()、disp()实现新增读者,存储读者借阅信息显示读者信息等功能
classReader
{
private:
inttag;
//删除标记1:
已删0:
未删
intno;
//读者编号
charname[10];
//读者姓名
intborbook[Maxbor];
//所借图书
public:
Reader(){}
char*getname(){returnname;
}//获取姓名
intgettag(){returntag;
}//获取删除标记
intgetno(){returnno;
}//获取读者编号
voidsetname(charna[])//设置姓名
{
strcpy(name,na);
}
voiddelbook(){tag=1;
}//设置删除标记1:
3.2.2建立读者数据库,保存读者个人信息并实现查询功能、删除
在读者数据库中,通过构造函数,将reader.txt(输入的读者个人信息)读到read[]数组中,通过clear()函数来删除所有读者信息,不过在删除前会先用for循环来对数据库中的数据进行遍历,来查找读者是否存在。
通过在析构函数中,将read[]写到reader.txt文件中,进行读者库的维护
classRDatabase
{
private:
inttop;
//读者记录指针
Readerread[Maxr];
//读者记录
public:
RDatabase()//构造函数,将reader.txt读到read[]中
{
Readers;
top=-1;
fstreamfile("
reader.txt"
ios:
:
in);
//打开一个输入文件
while
(1)
{
file.read((char*)&
s,sizeof(s));
if(!
file)break;
top++;
read[top]=s;
file.close();
//关闭reader.txt
}
3.2.3建立图书类,实现对图书的描述,图书的编号,书名,借出,还入等
同样根据课程设计要求,定义一个图书类,用来存储书籍的编号、名称,以及是否借阅的信息,通过delbook()、addbook()、borrowbook()、retbook()等函数来实现对图书的删除、增加、是否借阅和还书信息的记录
classBook
//图书编号
charname[20];
//书名
intonshelf;
//是否再架1:
再架2:
已借
Book(){}
char*getname(){returnname;
}//获取姓名
intgetno(){returnno;
}//获取图书编号
intgettag(){returntag;
}//获取删除标
3.2.4建立图书数据库,实现对图书的维护,查找,删除等
同样在图书数据库中,也是通过构造函数,将reader.txt(输入的图书信息)读到read[]数组中,通过clear()函数来删除所有图书信息,不过在删除前会先用for循环来对数据库中的数据进行遍历,来查找图书是否存在。
通过在析构函数中,将read[]写到reader.txt文件中,进行图书库的维护
classBDatabase
//图书记录指针
Bookbook[Maxb];
//图书记录
BDatabase()//构造函数,将book.txt读到book[]中
{
Bookb;
top=-1;
fstreamfile("
book.txt"
while
(1)
{file.read((char*)&
b,sizeof(b));
if(!
file)break;
top++;
book[top]=b;
}
file.close();
3.2.5系统目录的设置
根据课程设计的要求,系统目录设置为五个模块,第一个模块,借书模块;
第二个模块,还书模块;
第三个模块,图书维护模块;
第四个模块,读者维护模块;
第五个模块,退出系统。
这五个模块简明而有效地实现了图书管理、读者管理、借阅功能,同时也实现了界面友好。
cout<
<
endl<
"
\t\t\t欢迎使用图书管理系统\n"
;
cout<
1.借书\t\t\t\t2.还书\n"
3.图书维护\t\t\t4.读者维护\n"
0.退出\n"
请输入1-4进行选择:
\n"
cin>
>
choice;
4系统调试与结果
4.1程序运行结果
程序开始的主界面,分为借书还书,图书维护,读者维护。
在程序开始执行时要先选择3图书维护,然后选择4进行读者维护
图4.1.1主界面
进行图书维护、新增图书,按要求输入图书编号,图书名
图4.1.2新增图书
输入5可以显示所增加的书籍
图4.1.3显示所增书籍
输入2按要求即可修改书籍信息
图4.1.4更改图书信息
其他操作均按照界面中的要求来运行,对于读者系统的操作也同图书系统一样
图4.1.5新增读者
借书只需输入读者编码和图书编码
图4.1.6借书模块
在借了书后,图书管理系统中将会记录借阅信息
图4.1.7借阅记录
同样还书的方式也与借书一样
图4.1.8还书模块
图4.1.9还书后图书属性
4.2调试中出现的问题
(1)在开始程序运行的时候,输入读者编号输入的是字母结果导致程序死循环,后来经过多次运行发现在读者编号不能用字母,只能用数字,因为我最初定义读者编号时是定义的整形。
(2)由于刚开始时出现了输入读者编号出现死循环的错误,我又试了一下,同样在图书管理模块中图书编号也必须是输入数字才能运行。
还有为了更好的使用循环,设计了for语句,结果不能执行,最后无奈只能使用函数系统
另加函数,在主函数里调用。
(3)上机操作调试程序额的时候,发现了许多由于自己的粗心写错了单词,比如void写成了viod,还有粗心将private写成了privacy,调试的时候总是出现错误,后面一看才知道是自己的粗心造成的呀,还有就是有时候少些了分号或只打了半边括号,定义图书的时候忘了一项书号,结果最后无法输入,在打开文件的时候
fp
写错,经过很多的调试没成功,这也是个粗心错误。
作为一个学计算机的,这种错误以后得避免才行,不然小粗心会造成自己以后编程中的大问题!
(4)由于该系统程序的开发过程比较细致和复杂,需用到的c++各方面的知识都比较多,而初学者对C++学习特别是其中指针、数组和链表及输入流与输出流等比较陌生,且难以灵活运用,因而我们团队在整个开发过程经历一段很长的时间,且难以让其一次性地准确地调试和运行。
(5)由于在程序中大量的使用switch语句,有时候输入相应的指令却没有得到需要的结果,是因为在写case时没有写break语句,导致程序运行后得不到想要的结果。
至于少加“;
”的问题就不列举了
5使用说明
(1)运行程序到系统界面,先输入3进行图书维护或者输入4读者维护,然后按界面要求输入1新增图书和新增读者。
一定要先输入图书信息和读者信息才能够进行借书、还书等其他操作。
(2)如果需要更改、删除图书信息或者读者信息,可以在图书维护和读者维护中操作。
(3)按0返回系统界面,之后可按需求进行借书还书操作,借书还书只需要记得图书编号和读者自身编号即可,图书编号与读者编号都可在图书维护和读者维护中查询到。
(4)如果不记得自身的读者编号,可以在读者维护模块中通过姓名查询的方式查询到,同样,不记得要借的书籍的图书编号,也可以在图书维护模块中通过图书名的方式查询到。
同时,在图书维护模块中的显示功能里,可以了解到存储在数据库中的所有书籍和他们的编号。
6心得体会
通过这次课程设计,我深刻体会到这门课程并不是轻而易举就可也学好的,学习这门课程不仅需要细心严谨的态度,还需要充分发挥我们的想象力,让理论和实践充分的结合在一起,才能达到事半功倍的效果。
细节决定成败这句话在程序设计中最恰当不过了,因为一个小小的错误代码就可以使你的整个的程序无法进行,有时候绞尽脑汁也没能找出错误所在,只好老老实实的从新进行编写工作。
所以课程不仅理论性强,实际操作性更强,没有一个好的心态很难学好这门课程。
我们学习的不仅是科学的方法,还包括用什么样的态度去对待这门课程,并且让自理论性和实践性在自身得到充分的发挥,用细心严谨的态度去认识事物。
在课程设计过程中,我们每个人选择一个课题,认真研究,根据课堂讲授内容,借助书本,自己动手实践。
这样不但有助于我们消化课堂所讲解的内容,还可以增强我们的独立思考能力和动手能力;
通过编写实验代码和调试运行,我们可以逐步积累调试C#程序的经验并逐渐培养我们的编程能力、用计算机解决实际问题的能力。
通过这次课程设计使我充分的了解了对类和对象中基本原理的应用,知道了类对象的定义关系方法,同时也学会了编写简单的带有成员函数的程序。
虽然此次的程序不是很完备,但是总体还是一个比较能体现类和对象知识点能力的程序,当然只是相对于我这个初学者来说。
通过这次的C#课程设计,我也深刻了解到这门学问的博大精深,要积极进取,不断学习,不断积累知识。
同时也认识到自己的不足和缺点,做什么事都需要细心和耐心,并坚持下去,这样才还有一个比较满意的成果.实践出真知,通过亲自动手,使我们掌握的知识不再是纸上谈兵。
课程设计是一个把需求分析、程序编写、程序调试、撰写报告结合为一体的过程。
在这个过程中,不仅锻炼了我们缜密的思维和坚持不解的毅力,更磨练了一个队伍的团结互助的精神。
只有通过大家一起努力才能将课程设计的所有环节都顺利的完成。
另外程序设计中我们遇到问题并解决问题的过程,使得我们独自探索并解决问题的能力了有了一个提高,这有利于我们以后的学习。
同时这整一个过程,也使我们对程序编写的整个过程有了一个统筹全局的思想,因为需求分析、程序编写、程序调试、撰写报告这些过程是环环相扣的,绝对不可能独立进行。
课程设计是一个重要的教学环节。
我们在一般情况下都能够重视实验环节,但是容易忽略实验的总结,忽略实验报告的撰写。
通过这次实验让我们明白:
作为一名大学生必须严格训练分析总结能力、书面表达能力。
需要逐步培养书写科学实验报告以及科技论文的能力。
只有这样,我们的综合素质才会有好的提高。
7附录
7.1源代码
#include<
iostream>
iomanip>
string>
fstream>
//输入/输出文件流类
usingnamespacestd;
constintMaxr=100;
//最多的读者
constintMaxb=100;
//最多的图书
constintMaxbor=5;
//每位读者最多借五本书
voidaddreader(intn,char*na)//增加读者
tag=0;
no=n;
for(inti=0;
i<
Maxbor;
i++)
borbook[i]=0;
voidborrowbook(intbookid)//借书操作
if(borbook[i]==0)
{
borbook[i]=bookid;
return;
intretbook(intbookid)//还书操作
if(borbook[i]==bookid)
return1;
return0;
voiddisp()//读出读者信息
cout<
setw(5)<
no<
setw(10)<
name<
借书编号:
["
if(borbook[i]!
=0)
cout<
borbook[i]<
"
|"
]"
endl;
};
voidclear()//删除所有读者信息
intaddreader(intn,char*na)//添加读者时先查找是否存在
Reader*p=query(n);
if(p==NULL)
top++;
read[top].addreader(n,na);
return1;
Reader*query(intreaderid)//按编号查找