C语言图管理 .docx
精品名师归纳总结一、 设计内容和要求内容:主要利用 c 语言的文件操作才能设计开发一个小型的治理信息系统,至少具有如下功能:图书入库,按书名、出版社、价格、作者进行查询和分类统计。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:明确课程设计的目的,能依据课程设计的要求,查阅相关文献,为完成设计预备必要的知识。 提高同学用高级语言进行程序设计的才能,重点提高用C语言进行文件操作和绘图应用的编程技术水平。初步明白软件开发的一般方法和步骤。提高撰写技术文档的才能。二、详细设计2.1 、数据结构链表是线形表的一种,线形表分为次序储备结构和链式储备结构。线形表的次序储备结构的 特点是规律关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。链式储备结构的特点是用一组任意的储备单元储备线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较便利,因此接受链表来储备同学相关信息。且对结点的定义如下:/ 图书的数据结构:struct bookint booknum 。 /书号char bookname20 。 /书名char bookcreat10。 /书的作者int turefalse。 /用于借书和仍书模块判定一本书是否借出的条件book1000 。 /定义一个比较大的 1000 本书/ 会员卡的数据类型struct carint carnum 。 /卡号char studentsex4。 /性别char studentname20。 /姓名int studentclass。 /所在班级car1000。 /定义一千个会员/ 定义同学类型,用于存放借出的书籍可编辑资料 - - - 欢迎下载精品名师归纳总结struct studentint carnum 。 /卡号char lendbook10。 /借出的书数student1000。/定义一千个同学2.2 总体模块图图书治理系统查询图借阅图治理系归仍图书书统书按书名按作者增加图删除图修改图会员管图书统找找书书书理计定义会删除会卡号统借书统员员计计可编辑资料 - - - 欢迎下载精品名师归纳总结功能说明 :图 2.2 主体模块图可编辑资料 - - - 欢迎下载精品名师归纳总结查询图书用于查找储备的图书信息借阅图书用于借阅储备的图书治理图书可用于对图书的增加,删除,统计和修改并对会员进行治理会员治理系统能对会员进行增加,删除和借阅统计可编辑资料 - - - 欢迎下载精品名师归纳总结部分模块间关系 :经过治理系统对图书的处理,查询图书和借阅图书的功能才能得以实现经过会员治理系统的处理,才能实现对会员的查询和统计2.3 总体流程图主函数是程序入口,接受模块化设计。第一在主程序中打印欢迎界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,依据该值,调用相应的功能函数,同时设置一个断点,当返回值为确定条件时终止程序。开头运行YCase 0N主函数END调用主函数Y判定N运行图 2.3 总体流程图2.4 、chabook查询图书函数模块在这个模块中又分为两个子模块:按书名查找模块和按作者查找。1、按书名查找: 在这个子函数里使用指向文件的指针变量,定义指针变量fp , fp指向文件名为“ book.txt”的首的址,假如不存在,就自动建立。从键盘输入书名,依次移动指针的址,直到找到输入的文件名,找到后显示图书信息,再判定状态值是否为1,真的话就显示“此书现在无人借阅”,假就显示“这本书已经有人借出. ”,关闭文件,然后按任意键返回。假如找到最终可编辑资料 - - - 欢迎下载精品名师归纳总结一个的址仍没找到,就显示“没有你要查询的书籍. ”。关闭文件。图 2.4.1按书名查找图书关键代码: fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+2、按作者查找 :原理同上。图 2.4.2 按作者查找图书关键代码: fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+2.5 、lendbook借书模块定义文件指针变量fp , fp2 。fp指向“ car.txt会员卡记录文件 ”首的址,从键盘输入卡号,与文件中储存的依次比较,假如一样,就找到这个的址,并赋给变量i 。关闭这个文件。开头借书,输入要借的书,这时指针的址指向“book.txt”,以只读的方式打开,依次找与输入书名 一样的图书,假如找到,又分两种情形:状态值为1,就把书借出,把此书的状态值改为0. 否就,显示“书已被借出”。如故找不到,显示“不存在这样的书”,关闭文件,返回。图 2.5 借阅图书关键代码: fwrite&studentn,sizeofstruct student,1,fp。2.6 huanbook仍书函数模块同样定义两个指针变量: fp , fp2 。先从键盘输入要仍图书者会员卡卡号,然后是仍书人名字,与文件中的相对比,都一样就进入仍书过程,删除掉所仍图书的借书记录,将仍的书的原先状态设为无人借阅的。假如没找到图书就显示“你没有借这样的书,任意键返回.”,假如没找到所输卡号,就显示“没这样的卡,和治理员联系, 按任意键返回 .”。仍书过程终止。图 2.6 仍书关键代码: fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+2.7 、lendcount借书统计函数模块定义指向文件的指针变量 fp ,并使 fp 指向“ record.text ”, 以只写的方式打开文件, 从首的址读取,找到借书信息,就把统计借出书个数的变量 i 的值加 1。并显示借出的每一本书的信息。图 2.7 借书统计可编辑资料 - - - 欢迎下载精品名师归纳总结关键代码: fori=0。fread&studenti,sizeofstruct student,1,fp.=0。i+2.8 、delcar删除会员卡的函数模块定义指向文件的指针变量 fp ,和 fp2 。分别以写入的方式打开“ car.txt”, “bookl.txt”。从键盘输入要删除的会员卡卡号,然后把有关信息删除。图 2.8 删除会员卡关键代码: fori=0。fread&cari,sizeofstruct car,1,fp2.=0。i+fwrite&cari,sizeofstruct car,1,fp。2.9 、carcount会员统计函数模块定义指向文件的指针变量 fp ,使其指向“ car.txt”, 以只读的方式打开,依次读取里面数据,把会员个数赋给表示会员个数的变量n,并输出每个会员信息图 2.9 会员统计关键代码: fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+2.10 、addbook增加图书函数模块定义指向文件的指针变量 fp ,使其指向“ book.txt”并以追加的方式打开文件,依次从键盘读入图书的各个信息,写入文件,然后关闭文件。图 2.10 增加图书关键代码: whilechoice='y'|choice='Y'2.11 、delbook删除图书函数模块定义两个文件指针, fp , fp2. 从键盘输入图书名字。然后在文件中查找,找到后删除掉有关记录,找不到就报错。图 2.11 删除图书关键代码: ifstrcmpbookname,booki.bookname.=0fwrite&booki,sizeofstruct book,1,fp2。可编辑资料 - - - 欢迎下载精品名师归纳总结2.12 、changebook修改图书信息函数模块定义两个文件指针, fp ,fp2. 从键盘输入要修改的图书名。然后从文件中找一样的,找到后询问修改哪一部分。在进入修改。完成后关闭文件。图 2.12 修改图书关键代码: ifstrcmpbooki.bookname,bookname=02.13 、bookcount图书统计函数模块定义文件指针 fp ,并使之指向“ book.txt”依次从里面读取数据,并输出图 2.13 图书统计关键代码: fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+三、函数运行结果1 主函数运行界面图 3.1 主函数界面2) 查阅图书界面 输入 1 可进行查阅图书操作图 3.2 查询图书界面3) 进入借书系统 输入 2 可进行借阅图书操作可编辑资料 - - - 欢迎下载精品名师归纳总结4) 仍书界面 输入 4 能进行仍书操作图 3.3 借书系统可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结5) 退出系统 输入 0 退出系统图 3.4 仍书界面可编辑资料 - - - 欢迎下载精品名师归纳总结图 3.5 退出系统可编辑资料 - - - 欢迎下载精品名师归纳总结6) 进入治理系统 输入 3 进入治理系统图 3.6 治理系统7) 会员治理系统 在这输入 5,进入会员治理系统可编辑资料 - - - 欢迎下载精品名师归纳总结8) 图书统计 再输入 4 可统计图书图 3.7 同学治理系统可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结9) 卡号统计 输入 4 就是查看已有会员图 3.8 图书统计可编辑资料 - - - 欢迎下载精品名师归纳总结图 3.9 会员卡统计10) 增加图书 在治理系统界面上输入 1 为增加图书可编辑资料 - - - 欢迎下载精品名师归纳总结11) 删除图书 也可按 2 删除图书图 3.10 增加图书可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结12) 修改图书 按 3 就可以修改图书图 3.11 删除图书可编辑资料 - - - 欢迎下载精品名师归纳总结图 3.12 修改图书四、总结在本次课程设计中,先使用结构化分析方法对系统进行分析,将整个系统细分为几个模块,再针对每个小模块编写代码。由于时间比较短,源代码70%来自网上下载的一个半成品,刚开头连编译都通不过。经过我细心调试,去掉了一些错误和漏洞,是之得到了完备。出于美观化考虑,增加了刷屏的应用,使程序好看一些,虽然没有界面。经过不到两个星期的课程设计 , 我对 C 语言有了更进一步的熟识和明白,要学好它要重在实可编辑资料 - - - 欢迎下载精品名师归纳总结践,要通过不断的上机操作才能更好的学习好它。以前上课都是一些枯燥的东西,到真正用的时候才发觉没学的仍有好多好多,以前在课堂上只听而不实践的学习方法是错误的,虽然课堂上看似学会了,可到实际操作时一些问题就会显现。但是通过课程设计把所学的东西用在了实践上, 设计出来一些有用的东西,这几天精力都放在了编程上,但是有好多次总是运行不了,找来找去只是一些小小的错误。这几天深深的感到自己上机编程才能很不足, 编的程序可读性不太好 . 以后要多多学习别人的体会 , 增强程序的可读性。但经过这几天的改错,在查错方面也积存了一些经验。这些天虽然是有点累,但是仍是学到了许多没有学到的学问,感觉很有收成。致谢在此我要向对我们的实践进行指导的李忠老师、金尚柱老师仍有在程序调试过程中请教的同学进行感谢,感谢你们给我供应的帮忙,使我的设计得以成功的实现各项功能。再次向您们致以真诚的感谢!参考文献1 谭浩强等 .C 语言程序设计教程 . 北京:高等训练出版社, 19972 谭浩强.C 程序设计 . 第 2 版. 北京:清华高校出版社, 19993 郭浩志.C 语言程序设计 . 北京. 北京邮电高校出版社, 20054 林学焦.Turbo C2.0用户手册 . 北京. 学苑出版社 ,19935 谭浩强、张基温 . C 语言程序设计教程 . 北京:高等训练出版社, 20066 美SCHILDT H.C 语言大全 M.4版. 王子恢等译 . 北京. 电子工业出版社, 2001附录(源程序清单)#include<stdio.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<ctype.h>#define STACK_INIT_SIZE 10#define OK 1#define TRUE 1#define ERROR 0可编辑资料 - - - 欢迎下载精品名师归纳总结/* 定义同学类型,用于存放借出的书籍 */ struct student int carnum。char lendbook10。student1000。/* 定义书的类型 */ struct bookint booknum 。char bookname20 。float bookprice。char bookcreat20。int turefalse。 /* 用于借书和仍书模块判定一本书是否借出的条件*/book1000 。/* 借书卡的数据类型 */ struct carint carnum。char sex5。char studentname20。int studentclass。car1000。/* 查询图书信息模块 */*1按书名查找 */ findbookFILE *fp 。char bookname10 。int i。fp=fopen"book.txt","r"。printf"请输入你要查找的书名 :n"。scanf"%s",bookname 。可编辑资料 - - - 欢迎下载精品名师归纳总结fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+ifstrcmpbookname,booki.bookname=0ifbooki.turefalse=1printf"书号书名作者 n %d%s%sn",booki.booknum,booki.bookname,booki.bookcreat。printf"此书现在无人借阅 n 按任意键返回 n" 。 else printf"这本书已经有人借出 n" 。fclosefp。return 0。 fclosefp。return 0。printf"愧疚无此书 .n"。fclosefp。return 0。/*2按作者查找 */ findbook1FILE *fp 。char bookcreat10。int i。 fp=fopen"book.txt","r"。printf"请输入作者名 :n"。scanf"%s",bookcreat。fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+ifstrcmpbookcreat,booki.bookcreat=0ifbooki.turefalse=1可编辑资料 - - - 欢迎下载精品名师归纳总结printf"书号 书名 作者 n %d%s%sn",booki.booknum,booki.bookname,booki.bookcreat。printf"此书现在无人借阅 n 按任意键返回 n" 。else printf"此书已借出 .n"。fclosefp。return 0。fclosefp。return 0。printf"没有此书籍 n" 。fclosefp。return 0。chabook/*查找图书主模块 */char ch5 。doprintf"!欢迎进入图书查询系统! n" 。printf" 1:printf" 2:按书名查找 n"按作者查找 n"。printf" 0:返回 n"。printf"请输入 0 2:n"。ch5=getch 。switchch5case '1':findbook。getch 。break 。case '2':findbook1。getch 。break 。case '0':break。可编辑资料 - - - 欢迎下载精品名师归纳总结default:printf"无此操作 .n"。getch 。break 。whilech5.='0'。return 0。/* 借书与仍书模块 */*1.借书模块 */ lendbookFILE *fp,*fp2。int i,n。int carnum。system"cls"。printf"tt*欢迎进入借书系统 *nn"。printf"请输入借书人的 :n卡号:n"。scanf"%d",&carnum。fp=fopen"car.txt","r"。fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+ifcari.carnum=carnumn=i。fclosefp。printf"书名:n"。scanf"%s",studentn.lendbook。fp=fopen"book.txt","r"。fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+ifstrcmpbooki.bookname,studentn.lendbook=0ifbooki.turefalse=0 printf"对不起,此书有人借出,请借其他书 n" 。fclosefp。getch 。return 0。可编辑资料 - - - 欢迎下载精品名师归纳总结elsefclosefp。fp=fopen"record.txt","a+"。studentn.carnum=carnum。fwrite&studentn,sizeofstruct student,1,fp。fclosefp。fp=fopen"book.txt","r"。fp2=fopen"bookl.txt","w"。fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+ifstrcmpbooki.bookname,studentn.lendbook=0booki.turefalse=0。 fwrite&booki,sizeofstruct book,1,fp2。continue。fwrite&booki,sizeofstruct book,1,fp2。fclosefp。fclosefp2。fp=fopen"book.txt","w"。fp2=fopen"bookl.txt","r"。fori=0。fread&booki,sizeofstruct book,1,fp2.=0。i+fwrite&booki,sizeofstruct book,1,fp。fclosefp。fclosefp2。fopen"bookl.txt","w"。fclosefp2。printf"借书完毕,按任意键返回 .n"。getch。可编辑资料 - - - 欢迎下载精品名师归纳总结return 0。printf"不存在这样的书,任意键返回 .n"。fclosefp。getch。return 0。printf"你的卡号不存在,请申请新卡 , 按任意键返回 .n"。fclosefp。getch 。return 0。/*2.仍书函数 */ huanbookFILE *fp,*fp2。 /* 定义两个文件指针, fp2 用于修改数据时设立临时文件用,防止数据遭破坏*/ int i,n。int carnum。char lendbook10。system"cls"。printf"tt 欢迎进入仍书界面 。" printf"n请你输入你的 n 卡号:n"。scanf"%d",&carnum。fp=fopen"car.txt","r"。 /* 读取卡号记录 */fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+ /*for循环判定卡号是否存在 */ifcari.carnum=carnum /*卡号存在,进入下一循环 */n=i。fclosefp。printf"请输入你要仍的书的名字 :n"。可编辑资料 - - - 欢迎下载精品名师归纳总结scanf"%s",lendbook。fp=fopen"record.txt","r"。fori=0。fread&studenti,sizeofstruct student,1,fp.=0。i+ /*判定是否借阅了输入的书 */ifstrcmpstudenti.lendbook,lendbook=0 /*借阅了该书,进入下一循环,否就出错显示*/fclosefp。fp=fopen"record.txt","r"。fp2=fopen"bookl.txt","w"。fori=0。fread&studenti,sizeofstruct student,1,fp.=0。i+ifstrcmpstudenti.lendbook,lendbook=0continue。 /* 删除仍掉的书的借书记录 */fwrite&studenti,sizeofstruct student,1,fp2。 /* 写入原先没仍的书的记录 */fclosefp。fclosefp2。fp=fopen"record.txt","w"。fp2=fopen"bookl.txt","r"。fori=0。fread&studenti,sizeofstruct student,1,fp2.=0。i+fwrite&studenti,sizeofstruct student,1,fp。 /* 将借书记录信息写回 */fclosefp。fclosefp2。fopen"bookl.txt","w"。 /* 清临时文件的记录 */ fclosefp2。fp=fopen"book.txt","r"。可编辑资料 - - - 欢迎下载精品名师归纳总结fp2=fopen"bookl.txt","w"。fori=0。fread&booki,sizeofstruct book,1,fp.=0。i+ /*将书的记录写入临时文件,防止由于修改信息破坏以前的记录*/ifi=nbooki.turefalse=1。fwrite&booki,sizeofstruct book,1,fp2。 /* 将仍的书的原先状态设为无人借阅可编辑资料 - - - 欢迎下载精品名师归纳总结的*/continue。fwrite&booki,sizeofstruct book,1,fp2。可编辑资料 - - - 欢迎下载精品名师归纳总结fclosefp。fclosefp2。fp=fopen"book.txt","w"。fp2=fopen"bookl.txt","r"。fori=0。fread&booki,sizeofstruct book,1,fp2.=0。i+fwrite&booki,sizeofstruct book,1,fp。 /* 将临时文件写回 */fclosefp。fclosefp2。fopen"bookl.txt","w"。 /* 清临时文件 */ fclosefp2。printf"仍书完毕,按任意键返回 .n"。getch。return 1。printf"你没有借这样的书,任意键返回.n"。 /* 出错提示 */ fclosefp。可编辑资料 - - - 欢迎下载精品名师归纳总结getch。return 0。printf"没这样的卡,和治理员联系 , 按任意键返回 .n"。 /* 出错提示 */ fclosefp。getch 。return 0。/*3.借书统计 */ lendcountFILE *fp 。int i,n=0。fp=fopen"record.txt","r"。fori=0。fread&studenti,sizeofstruct student,1,fp.=0。i+printf"卡号借出的书籍n"。printf"%d%s n",studenti.carnum,studenti.lendbook。n=n+1 。fclosefp。printf"目前共有 %d本书借出 n",n。printf"按任意键 .n"。getch 。return n。/* 会员卡治理模块 */*1.增加会员卡 */ addcarFILE *fp 。int i=0。可编辑资料 - - - 欢迎下载精品名师归纳总结fp=fopen"car.txt","a+"。printf"卡号:n"。scanf"%d",&cari.carnum。printf"性别:n"。scanf"%s",cari.sex。printf"姓名:n"。scanf"%s",cari.studentname。printf"班级:n"。scanf"%d",&cari.studentclass。fwrite&cari,sizeofstruct car,1,fp。fclosefp。printf"输入完毕,任意键返回 .n"。getch 。/*2.删除会员卡 */ delcarFILE *fp,*fp2。int i。int carnum。char choice。fp=fopen"car.txt","r"。fp2=fopen"bookl.txt","w"。printf"要删除的卡号 不存在就不作改动 :n"。scanf"%d",&carnum。fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+ifcari.carnum.=carnumfwrite&cari,sizeofstruct car,1,fp2。可编辑资料 - - - 欢迎下载精品名师归纳总结fclosefp。fclosefp2。printf"确认删除 .Y/N.n"。scanf"%s",&choice。ifchoice='y'|choice='Y'fp=fopen"car.txt","w"。fp2=fopen"bookl.txt","r"。fori=0。fread&cari,sizeofstruct car,1,fp2.=0。i+fwrite&cari,sizeofstruct car,1,fp。fclosefp。fclosefp2。fp2=fopen"bookl.txt","w"。fclosefp2。printf"操作成功 .n按任意键返回 .n"。getch。return 0。elseprintf"操作已取消 .n按任意键返回 .n"。getch。return 0。/*3.会员卡统计 */ carcountFILE *fp 。int i,n=0。可编辑资料 - - - 欢迎下载精品名师归纳总结fp=fopen"car.txt","r"。fori=0。fread&cari,sizeofstruct car,1,fp.=0。i+printf"第%d张卡 n",i+1。printf"卡号性别姓名班级 n"。printf" %d%5s%10s%3dnn",cari.carnum,cari.sex,cari.studentname,ca ri.studentclass。n=n+1 。fclosefp。printf"目前共有 %d个会员。 n",n。printf"按任意键返回 .n"。getch。/* 图书治理模块 */*1.增加图书信息 */ addbookFILE *fp 。int i=0。char choice='y'。fp=fopen"book.txt","a+"。whilechoice='y'|choice='Y'printf"书号:n"。scanf"%d",&booki.booknum。printf"书名:n"。scanf"%s",booki.bookname。printf"作者:n"。scanf"%s",booki.bookcreat。printf"单价:n"。scanf"%f",&booki.bookprice。可编辑资料 - - - 欢迎下载精品名师归纳总结printf"请你设定书的状态 1 在架/0 不在:n"。scanf"%d",&booki.turefalse。fwrite&booki,sizeofstruct book,1,fp。printf"是否要输入下本书 y/nn"。scanf"%s",&choice。