c语言课程设计 图书管理系统 高校教师人事管理系统5316.docx
图书借阅管理系统图书借阅管理是图书馆一个最基本的工作,这里用C语言的知识设计开发一个简单的图书借阅管理系统,系统主要实现图书信息和学生信息的管理,图书查询及图书借阅管理。系统设计要求系统主要实实现以下下六个功功能:用户登录录。系统统用户分分为管理理员和学学生。管管理员登登录时必必须输入入密码,密密码正确确才能进进入系统统;学生生登录时时无需密密码,输输入学号号即可。图书信息息管理。图图书信息息包括:书号、书书名、作作者、图图书分类类、出版版社、出出版时间间、单价价、总量量和库存存量。图图书信息息管理包包括:输输入图书书信息(从从键盘或或从文件件)、保保存图书书信息、修修改图书书信息、增增加图书书信息、删删除图书书信息和和输出图图书信息息。学生信息息管理。学学生信息息包括:学号、姓姓名、借借书卡(借借阅标记记、书号号、借阅阅时间)。学学生信息息管理包包括:输输入学生生信息(从从键盘或或从文件件)、保保存学生生信息、修修改学生生信息、增增加学生生信息、删删除学生生信息和和输出学学生信息息。图书查询询功能。图图书查询询分为:按书名名查询、按按作者查查询、按按图书分分类查询询、按出出版社查查询和按按出版时时间查询询。借书功能能。借书书时,先先判断学学生是否否有空闲闲的借书书卡,若若没有则则应输出出提示信信息;若若有空闲闲的借书书卡,则则要求学学生输入入所借图图书的书书号,若若该书库库存量不不为0,则将将该书借借出,同同时在借借书卡上上记录该该书的书书号和借借阅时间间,并修修改该书书的库存存量。还书功能能。还书书时,先先检查学学生的借借书卡,若若借书卡卡都为空空,则不不能进行行还书操操作,若若有借书书卡不为为空,则则可以还还书,此此时要求求学生输输入所还还图书的的书号,将将对应借借书卡上上的记录录清零,并并修改该该书的库库存量。系统总体设设计1. 功能能模块图图用户登录管理模块图书借阅管理系统图书信息管理模块学生信息管理模块图书信息查询模块图书借阅管理模块系统功能模块图管理员登录学生登录输入图书信息保存图书信息修改图书信息增加图书信息删除图书信息输出图书信息输入学生信息保存学生信息修改学生信息增加学生信息删除学生信息输出学生信息按书名查询按作者查询按图书分类查询按出版社查询按出版时间查询借书管理还书管理2. 数据据结构设设计系统共定义义了四个个结构体体类型,包包括日期期类型、借借书卡类类型、图图书类型型和学生生类型,其其中在图图书类型型中要使使用日期期类型,而而在学生生类型中中要使用用日期和和借书卡卡类型,定定义如下下:typeddef strructt daate /日期期类型 sshorrt yeaar; /年 sshorrt monnth; /月月 sshorrt dayy; /日日SDATTE;typeddef strructt liibraary_carrd /借借书卡类类型 SShorrt flaag; /是否借借阅标记记 CCharr IISBNN200; /所借借图书的的书号 SSDATTE borr_tiime; /借阅时时间SLCAARD;typeddef strructt sttudeent /学生生类型 ccharr nnum15; /学号 ccharr nnamee200; /姓名 SSLCAARD caard5; /借借书卡(规规定每人人最多有有5张)SSTUUD;typeddef strructt boook /图书类类型 ccharr IISBNN200; /书号 ccharr bbookknamme440; /书名 ccharr aauthhor20; /作者者 ccharr ppubllishher30; /出出版社 ccharr bbookkclaass20; /图图书分类类 sshorrt tottal_numm, sstocck_nnum; /总量,库库存量 ffloaat priice; /单单价 SSDATTE pubblissh_ttimee; /出版时时间SBOOOK;系统定义了了两个全全局变量量数组,分分别存放放图书信信息和学学生信息息,因数数组大小小是固定定的,为为使用方方便在系系统中定定义两个个符号常常量,具具体定义义如下:#defiine BOOOKNUUM 110000 / BOOOKNNUM为为系统允允许的最最大图书书数量#defiine STUUDNUUM 1100 / STTUDNNUM为为系统允允许的最最多学生生人数SSTUDD sstuddenttSTTUDNNUM=00; /学学生数组组,初始始化为00SBOOKK bbookkBOOOKNNUM=00; /图书数数组,初初始化为为03. 功能能模块设设计(1) mmainn函数的的设计:由于图图书信息息和学生生信息都都保存在在文件中中,系统统运行的的第一个个工作是是从文件件中将图图书信息息和学生生信息读读入到内内存数组组boook和数数组sttudeent中中,在读读入信息息的过程程中同时时统计出出目前图图书的数数量和学学生的人人数,并并将数据据分别存存放在整整型变量量bn和sn中,bnn为图书书数量,sn为学生人数。如果bn=0或sn=0,系统会输出提示信息,让管理员输入图书信息和学生信息。然后系统会显示主菜单,用户必须登录后才能使用系统提供的各种服务。(2) 用用户登录录管理模模块包括括2个函数数:MaanaggerLLogiin()和StuudenntLooginn(),该该模块由由maiin函数数调用。函数MannageerLooginn()用用来完成成管理员员登录工工作,首首先要求求管理员员用户输输入密码码,若密密码错误误,则直直接返回回主菜单单界面;密码正正确时将将显示管管理员用用户的功功能菜单单,输入入数字可可执行相相应的功功能。函数StuudenntLooginn()用用来完成成学生登登录工作作,要求求学生输输入学号号,若学学号错误误则要求求学生重重新输入入学号;输入学学号正确确则显示示学生用用户的功功能菜单单,输入入数字可可执行相相应的功功能。(3) 图图书信息息管理模模块包括括11个函函数:IInpuutOnneboook()、LoaadBoookss()、SavveOnneboook()、SavveAlllboookss()、OriiginnalBBookk()、ModdifyyBoook()、AdddBoook()、DellBoook()、OuttputtOneeboook()、OuttputtAlllboooks()和OuttputtBriief ()。只只有管理理员用户户可以调调用图书书信息管管理模块块。函数InpputOOnebbookk()用用来实现现从键盘盘输入一一本图书书的全部部信息。函数LoaadBoookss()用用来实现现从文件件“boook.datt”中输输入全部部图书的的信息,并并将这些些数据存存放到内内存数组组boook中。函数SavveOnneboook()用来来实现将将一本图图书的信信息保存存到文件件“boook.datt”中。函数SavveAlllboookss()用用来实现现将全部部图书的的信息保保存到文文件“bbookk.daat”中中。函数OriiginnalBBookk()用用来实现现图书信信息的初初始化,在在程序第第1次运行行时必须须调用该该函数,输输入若干干本图书书的信息息,并将将这些信信息保存存在文件件中。该该函数是是通过循循环多次次调用IInpuutOnneboook()函数数实现多多本图书书信息的的输入,然然后调用用SavveAlllboookss()函函数将已已输入的的所有图图书的信信息保存存在文件件“boook.datt”中。函数ModdifyyBoook()用来实实现对图图书信息息的修改改,用户户首先输输入书号号,书号号错误则则输出提提示信息息,要求求用户重重新输入入;书号号正确则则用户可可以选择择要修改改的数据据项对图图书信息息进行修修改(用用swiitchh结构实实现),一一本图书书的信息息修改完完毕后,调调用SaaveOOnebbookk()函函数,将将修改后后的信息息保存到到文件中中。然后后询问用用户是否否继续修修改其他他图书的的信息,用用户选择择y,则重重复上述述的修改改过程;用户选选择nn,则则结束函函数,返返回到管管理员菜菜单界面面。函数AdddBoook()用来实实现添加加图书信信息,通通过调用用InpputOOnebbookk()函函数,从从键盘输输入一本本图书的的信息,然然后将该该信息写写入文件件。然后后询问用用户是否否继续添添加其他他图书的的信息,用用户选择择y,则重重复上述述过程;用户选选择nn,则则结束函函数,返返回到管管理员菜菜单界面面。函数DellBoook()用来实实现删除除图书信信息,用用户首先先输入书书号,书书号错误误则输出出提示信信息,要要求用户户重新输输入;书书号正确确则会先先输出该该书号对对应图书书的信息息,然后后询问用用户是否否确定要要删除该该书的信信息,用用户选择择y才能真真正删除除该书信信息。最最后询问问用户是是否继续续删除其其他图书书的信息息,用户户选择y,则则重复上上述过程程;用户户选择n,则则结束函函数,返返回到管管理员菜菜单界面面。函数OuttputtOneeboook()用来实实现输出出一本图图书的全全部信息息。函数OuttputtAlllboooks()通过过多次调调用OuutpuutOnneboook()函数数来实现现输出全全部图书书的信息息。函数OuttputtBriief()用来来实现以以列表方方式输出出全部图图书的简简要信息息,简要要信息包包括:书书号、书书名、作作者和总总量。(4) 学学生信息息管理模模块包括括10个函函数:IInpuutOnnesttud()、LoaadSttudss()、SavveOnnesttud()、SavveAlllsttudss()、OriiginnalSStudd()、ModdifyyStuud()、AdddStuud()、DellStuud()、OuttputtOneestuud()和OuttputtAlllstuuds()。管理员员用户可可以使用用学生信信息管理理模块的的全部功功能,学学生用户户只能使使用该模模块中的的一个功功能,即即OuttputtOneestuud()函数(输输出一个个学生的的信息)。学生信息管管理模块块中函数数的实现现方法与与图书信信息管理理中的类类似,以以下仅作作简单说说明。函数InpputOOnesstudd()用用来实现现从键盘盘输入一一个学生生的信息息。函数LoaadSttudss()用用来实现现从文件件“sttud.datt”中输输入全部部学生的的信息,并并将这些些数据存存放到内内存数组组stuudennt中。函数SavveOnnesttud()用来来实现将将一各学学生的信信息保存存到文件件“sttud.datt”中。函数SavveAlllsttudss()用用来实现现将全部部学生的的信息保保存到文文件“sstudd.daat”中中。函数OriiginnalSStudd()用用来实现现学生信信息的初初始化,在在程序第第1次运行行时必须须调用该该函数。该该函数是是通过循循环多次次调用IInpuutOnnesttud()函数数实现多多个学生生信息的的输入,然然后调用用SavveAlllsttudss()函函数将已已输入的的所有学学生的信信息保存存在文件件“sttud.datt”中。函数ModdifyyStuud()用来实实现学生生信息的的修改。函数AdddStuud()用来实实现添加加学生信信息。函数DellStuud()用来实实现删除除学生信信息。函数OuttputtOneestuud()用来实实现输出出一个学学生的全全部信息息。函数OuttputtAlllstuuds()用来来实现输输出全部部学生的的基本信信息(即即学号和和姓名)。(5) 图图书信息息查询模模块包括括6个函数数:SeearcchMeenu()、SearrcBnnamee()、SeaarchhAutthorr()、SeaarchhBcllasss()、SeaarchhPubblissherr()、SeaarchhPubbtimme()。管理理员和学学生都可可以使用用图书信信息查询询模块。函数SeaarchhMennu()用来显显示图书书查询服服务菜单单,用户户输入数数字可执执行相应应的查询询服务。函数SeaarcBBnamme()用来实实现按书书名进行行图书信信息的查查询。用用户可以以输入完完整的书书名进行行精确查查询(如如输入“CC语言程程序设计计”),精精确查询询是使用用字符串串比较函函数sttrcmmp(),将输输入的书书名与已已有图书书的书名名逐一进进行比较较,当该该函数的的返回值值等于00,表示示这两个个书名完完全相同同,即找找到要查查询的图图书。另另外,用用户也可可以输入入书名中中的几个个字进行行模糊查查询(如如输入“CC语言”,或输输入“程序设设计”),模模糊查询询是使用用求子串串函数sstrsstr(),在在已有图图书的书书名中寻寻找输入入的字符符串,如如果该函函数的返返回值不不为空,则则说明该该书名中中包含这这个字符符串,那那么就应应该输出出这本图图书的信信息。通通常,模模糊查询询会列出出多个查查询结果果。函数SeaarchhAutthorr()用用来实现现按作者者姓名进进行图书书信息的的查询。用用户可以以输入完完整的姓姓名进行行精确查查询(如如输入“谭浩强强”),也也可以只只输入姓姓氏进行行模糊查查询(如如只输入入“张”),具具体方法法与按书书名查询询类似。函数SeaarchhBcllasss()用用来实现现按图书书分类进进行图书书信息的的查询。考考虑到用用户可能能不能输输入完全全正确的的图书分分类名称称,所以以在该函函数中只只采用模模糊查询询方式。函数 SeearcchPuubliisheer()用来实实现按出出版社名名称进行行图书信信息的查查询。用用户在输输入出版版社名称称时,一一般不会会输入“出版社社”这三个个字(如如想查询询清华大大学出版版社的图图书,通通常用户户会输入入“清华大大学”),所所以在该该函数中中也是只只采用模模糊查询询方式。函数 SeearcchPuubtiime()用来来实现按按出版日日期进行行图书信信息的查查询。使使用该函函数必须须注意要要按系统统规定的的格式输输入日期期,若想想查询220044年5月份出出版的图图书,则则应输入入“20004.5”;若想查查询20004年年出版的的图书,则则应输入入“20004”。假设输入日期为“2004.5”,进行查询时,先判断输入的年份与出版日期中的年份是否相等,若不相等则结束本次循环,若相等则用变量k记录其下标,然后再判断月份是否相等,月份若不相等则用continue结束本次循环,月份若相等则可输出这本书(即第k本书)的信息,然后再继续判断下一本图书。(6) 图图书借阅阅管理模模块包括括2个函数数:BoorroowBoook()和RetturnnBoook()函数。函数BorrrowwBoook()用来实实现借书书管理。由由学生类类型定义义可知,每每个学生生有5张借书书卡,借借书卡的的信息包包括:借借阅标记记flaag、所所借图书书的书号号ISBBN和借借阅时间间borr_tiime。借借书时,首首先查找找学生是是否有空空闲的借借书卡(即即判断该该生借书书卡的借借阅标记记flaag是否否为0),若若flaag为0,则可可以借书书,这时时要求学学生输入入要借图图书的书书号,然然后在图图书数组组boook中查查找该书书,若在在数组bbookk中没找找到该书书,则提提示“输入的的书号有有误,请请重新输输入!”;若找找到该书书,则先先判断该该书的库库存量是是否为00,若库库存量为为0则提示示"抱歉!该书库库存量为为0,无法法借阅!”。若库库存量大大于0,则将将该书借借给学生生,此时时需要进进行以下下6步操作作:step11 将该该书的库库存量减减1;step22 学生生借书卡卡的借阅阅标记fflagg置1;step33 学生生借书卡卡的书号号填写上上该书的的书号;step44 学生生借书卡卡的借阅阅时间赋赋值为系系统时间间;为了了提取系系统时间间,首先先定义一一个结构构体变量量d:strructt tmm d; 结构构体类型型strructt tmm定义在在文件“ttimee.h”中,具体定义如下:strucct ttm iint tm_secc; / seeconnds aftter thee miinutte - 00,599 iint tm_minn; / minnutees aafteer tthe houur - 00,599 iint tm_houur; / houurs sinnce middnigght - 0,223 iint tm_mdaay; / dday of thee moonthh - 1,31 iint tm_monn; / mmontths sinnce Jannuarry - 00,111 iint tm_yeaar; / yeaars sinnce 19000 iint tm_wdaay; / ddayss siincee Suundaay - 00,6 iint tm_ydaay; / ddayss siincee Jaanuaary 1 - 00,3665 iint tm_isddst; / dayyligght savvinggs ttimee fllag ;这里我们需需要使用用其中的的3个成员员:tmm_yeear、tm_monn和tm_mdaay。通通过调用用函数_gettsysstimme(&&d); 可以以得到系系统时间间,假设设用下面面语句输输出日期期:printtf(""%d.%d.%d"", dd.tmm_yeear, d.tm_monn, dd.tmm_mdday); 若借书日期期是19998.5.112,则则会输出出98.4.112,若若借书日日期为220055.5.12,则则会输出出1055.4.12,这这样的输输出结果果显然不不好,为为了正确确输出119988.5.12或或20005.55.122,必须须对成员员tm_yeaar和tm_monn进行处处理,对对于tmm_moon的处处理比较较简单,直直接加11即可(dd.tmm_moon+11),对对于tmm_yeear按按下面方方法处理理:如果果年份整整除1000等于于0(即年年份<220000),则则年份=19000+dd.tmm_yeear;如果年年份整除除1000等于1(即年年份>=20000), 则年年份=220000+d.tm_yeaar%1100。step55 保存存修改过过的图书书信息和和学生信信息;step66 提示示用户借借书成功功。最后询问学学生是否否"继续借借书吗?(y/n)"",若学学生输入入y,则重重复上面面的借书书过程;若输入入n,则返返回到学学生功能能选择菜菜单界面面。函数RetturnnBoook()用来实实现还书书管理。还还书时,首首先统计计该生有有几张已已使用的的借书卡卡,将数数据存放放在变量量t中,若若t为0,说明明该生目目前根本本没有借借阅的图图书,无无法进行行还书操操作;若若t大于0,则可可进行还还书操作作,先输输入书号号,在学学生的借借书卡中中寻找,若若没找到到该书号号,则提提示"输入的的书号有有误,请请重新输输入!"";若找找到该书书号,则则通过以以下6个步骤骤进行还还书:step11 学生生借书卡卡的借阅阅标记fflagg置0;step22 学生生借书卡卡的书号号置空;step33 学生生借书卡卡的借阅阅时间清清0;step44 变量量t减1;step55 在数数组boook中中寻找该该书号,找找到后其其库存量量加1;step66保存修修改过的的图书信信息和学学生信息息。最后询问学学生是否否"继续还还书吗?(y/n)"",若学学生输入入y,则重重复上面面的还书书过程;若输入入n,则返返回到学学生功能能选择菜菜单界面面。部分源程序序代码#inclludee<sttdioo.h>>#inclludee<sttdliib.hh>#inclludee<sttrinng.hh>#inclludee<coonioo.h>>#inclludee<tiime.h>/ 结构构体类型型的定义义typeddef strructt daate /日期类类型 shhortt yyearr; /年 shhortt mmontth; /月 shhortt dday; /日SDATTE;typeddef strructt liibraary_carrd /借书书卡类型型 shhortt fflagg; /是否借借阅标记记 chhar ISSBN20; /所所借图书书的书号号 SDDATEE bbor_timme; /借阅阅时间SLCAARD;typeddef strructt sttud /学学生类型型 chhar nuum115; /学学号 chhar naame20; /姓名名 SLLCARRD carrd55; /借借书卡SSTUUD;typeddef strructt boook /图书类类型 chhar ISSBN20; /书号号 chhar boooknnamee400; /书书名 chhar auuthoor220; /作者 chhar puubliisheer330; /出版版社 chhar boookcclasss220; /图书书分类 shhortt ttotaal_nnum, sttockk_nuum; /总总量,库库存量 flloatt ppricce; /单价价 SDDATEE ppubllishh_tiime; /出出版时间间SBOOOK;#defiine SDAATE_LENN siizeoof(SSDATTE) /SSDATTE_LLEN为为日期类类型占用用存储空空间的大大小#defiine SLCCARDD_LEEN ssizeeof(SLCCARDD) /SLLCARRD_LLEN为为借书卡卡类型占占用存储储空间的的大小#defiine SSTTUD_LENN siizeoof(SSSTUUD) /SSSTUDD_LEEN为学学生类型型占用存存储空间间的大小小#defiine SBOOOK_LENN siizeoof(SSBOOOK) /SBOOOK_LENN为图书书类型占占用存储储空间的的大小#defiine BOOOKNUUM 110000 /图书总总数,可可按需要要更改其其数值#defiine STUUDNUUM 1100 /学生总总数,可可按需要要更改其其数值SSTUDD sstuddenttSTTUDNNUM=00; /学学生数组组(全局变变量)SBOOKK bbookkBOOOKNNUM=00; /图书数数组(全局变变量)/函数声声明void MannageerLooginn(innt *pbnn, iint *pssn); /管理理员登录录函数void StuudenntLooginn(innt bbn, intt snn); /学生生登录函函数void InpputOOnebbookk(innt ii); /输入入一本图图书信息息的函数数int LLoaddBoooks(voiid); /从文件件载入全全部图书书信息的的函数void SavveOnneboook(intt i); /保存存一本图图书信息息的函数数void SavveAlllboookss(innt bbn); /保保存全部部图书信信息的函函数int OOrigginaalBoook(voiid); /图图书信息息初始化化的函数数void ModdifyyBoook(iint bn); /修改改图书信信息的函函数int AAddBBookk(innt bbn); /添加加图书信信息的函函数int DDelBBookk(innt bbn); /删删除图书书信息的的函数void OuttputtOneeboook(iint i); /输输出一本本图书信信息的函函数void OuutpuutAlllboookss(innt bbn); /输输出全部部图书详详细信息息的函数数void OuutpuutBrrieff(innt bbn); /输输出全部部图书简简要信息息的函数数void InpputOOnesstudd(innt ii); /输输入一个个学生信信息的函函数int LLoaddStuuds(voiid); /从文文件载入入全部学学生信息息的函数数void SavveOnnesttud(intt i); /保保存一个个学生信信息的函函数void SavveAlllsttudss(innt ssn); /保存全全部学生生信息的的函数int OOrigginaalSttud(voiid); /学生信信息初始始化的函函数void ModdifyyStuud(iint sn); /修改改学生信信息的函函数int AAddSStudd(innt ssn); /添加加学生信信息的函函数int DDelSStudd(innt ssn); /删除除学生信信息的函函数void OuttputtOneestuud(iint i); /输出出一个学学生信息息的函数数void OuttputtAlllstuuds(intt snn); /输输出全部部学生信信息的函函数void SeaarchhMennu(iint bn); /图书查查询函数数void SeaarcBBnamme (intt bnn); /按书书名查询询函数void SeaarchhAutthorr(innt bbn); /按作作者查询询函数void SeaarchhBcllasss(innt bbn); /按图图书分类类查询函函数void SeaarchhPubblissherr(innt bbn); /按出出版社查查询函数数void SeaarchhPubbtimme(iint bn); /按出版版时间查查询函数数void BorrrowwBoook(iint bn,intt m); /借书书函数void RetturnnBoook(iint bn,intt m); /还还书函数数void maiin(vvoidd) / maain函函数定义义 int sseleect, bnn, ssn; bnn=LooadBBookks(); /调调用LooadBBookks(),返回回值为图图书数量量,将其其赋值给给bn iff(bnn=00) prrinttf("" 图书书信息为为空!nnn"); snn=LooadSStudds(); /调用LooadSStudds(),返回回值为学学生人数数,将其其赋值给给sn iff(snn=00) priintff(" 学生信信息为空空!nnn"");whilee(1) printtf(""n""); prrinttf(""t-nn"); prrinttf(""t* *nn"); prrinttf(""t* 图书书借阅管管理系统统 *n"); prrinttf(""t* *nn"); prrinttf(""t-nnn"); prrinttf(""t 1. 管理员员n""); prrinttf(""t 2. 学生nn"); prrinttf(""t 0. 退出系系统nnn""); prrinttf(""t 请选择择用户:"); sccanff("%d", & sellectt); getchhar(); /该函数数用于读读取回车车符,消除对对以后数数据输入入的影响响switcch(sseleect) case 1: MannageerLooginn(&bbn,&&sn); breeak; casse 22: SStuddenttLoggin(bn,sn); brreakk; casse 00: pprinntf("nn 谢谢谢使用!再见n"); exxit(1); deffaullt: priintff("n 按按键错误误,请重重新选择择!nn"); /ennd sswittch /endd whhilee/用户登登录模块块的函数数定义/=/ 功能能:实现现管理员员登录, 显示示管理员员用户的的菜单,进进行功能能选择/ 参数数:pbbn、psnn分别为为maiin函数数中变量量bn、sn的地地址/ 返回回:无/ 主要要思路:用sttrcmmp函数数实现密密码验证证,用sswittch结结构实现现菜单功功能选择择/=/void MannageerLooginn(innt *pbnn, iint *pssn) in