2022年c语言图书管理系统上机实验.docx
精品学习资源成都信息工程高校运算机系课程试验报告试验课程:C 语言程序设计基础试验工程:图书治理系统指导老师:李莉丽同学姓名 :同学学号:20210班 级:运算机科学与技术试验地点:5201试验时间:试验成果: 评阅老师:2021 年 5 月 18 日欢迎下载精品学习资源一【上机试验目的】设计并实现该课程设计的目的主要在于:1) 对确定规模的综合软件编程有确定的经受与熟识;在做的过程中, 你会发觉,提前的规划即分析与设计重要过编程过程,否就会走很多弯;2) 综合并结合现实应用使用 C 语言的学问;这个设计会用到C 语言这门课的全部学问, 其中以文件、 数组与链表为主, 书中提到的主要及重点算法都会使用到;3) 不仅涉及编程, 仍涉及到功能分析、 模块规划等方面的学问, 这些学问在后续课程学习时, 会经常使用; 这些学问在学软件工程 这门课时, 会系统讲解;期望有了这次的经受,你能更好的体会软件工程这门课的意义,并能学好和用好其中的学问;4) 每项功能的实现, 一般有多种方法, 这里都强调使用时空效率最高的方法,此次实现只是让你有一个初步的熟识, 在下学期学习了数据结构后,你就知道为什么让你这样做,你也对数据结构这门课的作用及 意义有所明白;二【试验环境】PC 机每人 1 台三【上机试验内容】编写图书治理系统 , 具有以下基本功能(1) ) 各种基本数据的录入;如:图书资料基本信息录入等;(2) ) 各种基本数据的修改;即:答应对以及录入的数据重新进行编辑、修改;(3) ) 各种基本数据的插入;如:在图书选购信息中插入一条新信息等;(4) ) 各种基本数据的删除;如:假设某本书遗失且馆藏数为0,删除该书的相关信息等;(5) ) 基于各种数据的查询;如:书名中含有“运算机”的全部书籍、全部借出的全部图书等;(6) )基于各种基本数据的统计运算;欢迎下载精品学习资源四 【 上 机 调 试 程 序 流 程 图 】( 注 : 可 打 印 )开头调用 _window 函数,设置界面属性调用 words函数在相应位置输出文字调用 choose显示光标调用 play, 输入 y 的值Play = .欢迎下载精品学习资源调用 add函数调用 manage函数调用 search函数调用 sta函数退出 ,执行exit0欢迎下载精品学习资源终止欢迎下载精品学习资源五【上机调试中显现的错误信息、错误缘由及解决方法】读写错误 :fopen 的时候改成用二进制读写.目前不知道为什么不用二进制不能读写.六【上机调试后的源程序及仍存在的问题】#include <stido.h> #include <dos.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <string.h>#define Key_UP72#define Key_DOWN80#define Key_ENTER 28#define Key_N49#define Key_Y21#define LENsizeofstruct linklisttypedef struct book1/* 图书基本信息结构体 */char name20;char writer30 ;char type20 ;char num20 ;char time20 ;char press20;char edition20 ;char ISBN40 ;float price ;int count ;int lendnum ;bbasic ;/*图书资料基本信息:中图法分类号、图书编号、书名、作者(要考虑多个作者情形)、出版社、出版日期、 ISBN 、版次、定价、馆藏数、借阅数等;*/typedef struct book2/* 图书选购信息结构体 */欢迎下载精品学习资源char name20;char writer20 ;char time15 ;int num ;float price ;float money ;char bill 30 ;bpurchase;/*图书选购信息:书名、作者、选购日期、选购数量、选购单价、选购金额、发票号码、图书编号等;*/typedef struct book3/* 图书借阅信息结构体 */*需要输入的信息 */ char name20;char person20 ;char company20 ;char num20 ;/* 借书证号 */ char btime15 ;/*运算可得信息 */ char rtime15 ;char fine20 ;blend ;/*图书借阅信息:借阅人、借阅人所在单位、借书证号、所借书名、借阅日期、归仍日期、逾期罚款等;借阅期限为一个月,逾期1 天,罚款 1 角;*/struct linklistbbasic binfo ;struct linklist *next ; ;int key ;void menu ;void _window ;void words ;void boxint,int,int,int;int _chooseint bot, int top ;欢迎下载精品学习资源void playint ;int readsum ;void add ;void addbook ;void addbuy ;void addborrow ;void manage ;struct linklist* create ;void modify ;void delete ;void insert ;void search;void searchname;void searchwriter ;void orderwbbasic binfo100;void orderwbbasic binfo100;int halfnint sum,bbasic binfo100,char *find;int halfwint sum,bbasic binfo100,char *find;void sta ;void blist ;void bmoney ;int mainvoidmenu;void menuint y ;_window;/* 显示窗口*/words ;y = choose7,19;playy ;/* 显示菜单文字 */* 光标 */* 依据键盘值操作 */void _window/* 窗口初始化 */textbackgroundBLUE;欢迎下载精品学习资源textcolorWHITE ;clrscr ;box1,1,24,80 ;void words/* 显示菜单文字 */textcolorWHITE ;gotoxy30,7 ;textbackgroundRED ;cprintf"Add Book info";textbackgroundBLUE ;gotoxy30,10 ;cprintf"Manage Book";gotoxy30,13 ;cprintf"Search Book" ;gotoxy30,16 ;cprintf"Book Statistic";gotoxy30,19 ;cprintf"Exit";gotoxy35,22 ;textcolorLIGHTGRAY;textbackgroundBLUE ;cprintf" Main Menu ";gotoxy25, 2 ;textcolorRED ;highvideo ;cprintf"The Library Managemnt Program";normvideo ;void boxint x,int y, int high, int width/* 画方框 */int i ;gotoxyx,y ;putchar0xda ;for i = 1; i < width - 1 ; i+putchar0xc4 ;putchar0xbf ;gotoxyx, y + high - 3 ;putchar0xc0 ;欢迎下载精品学习资源gotoxywidth, y + high - 3;putchar0xd9 ;for i = 1 ; i < high - 1 ; i+gotoxyx,y+i ;putchar0xb3 ;gotoxyx + width -1, y+i;putchar0xb3 ;gotoxyx, y + high - 1 ;putchar0xc0 ;for i = 1; i < width - 1 ; i+putchar0xc4 ;gotoxyx + 1, y + high - 3 ;for i = 1 ; i < width - 1 ; i+putchar0xc4 ;gotoxyx + width-1 ,y + high -1;putchar0xd9 ;int key/* 读键盘 */union REGS rg ;rg.h.ah = 0;int860x16, &rg, &rg;return rg.h.ah;int chooseint bot,int top/* 依据 Y 的值选择操作 */int ky,y = 7 ;gotoxy30,bot ;doky = key ;switchkycase Key_UP:欢迎下载精品学习资源if y > botupbary ;y = y - 3 ; ;break;case Key_DOWN:if y < topdownbary ;y = y + 3 ; ;break;whileky .= Key_ENTER;return y;upbarint y/* 光标上移 */int i ;typedef struct texel_structunsigned char ch;unsigned char attr;texel ;texel t;fori=30 ; i<=48 ;i+gettexti,y,i,y,&t ;t.attr=0x1f ;puttexti,y,i,y,&t ;gettexti,y-3,i,y-3,&t;t.attr=0x4f ;puttexti,y-3,i,y-3,&t; ;gotoxy30,y-3 ;return;downbarint y/* 光标下移 */int i ;欢迎下载精品学习资源typedef struct texel_structunsigned char ch;unsigned char attr;texel ;texel t;fori=30 ; i<=48 ;i+gettexti,y,i,y,&t ;t.attr=0x1f ;puttexti,y,i,y,&t ;gettexti,y+3,i,y+3,&t;t.attr=0x4f ;puttexti,y+3,i,y+3,&t; ;gotoxy30,y+3 ;return;void playint y/* 依据 y 的值选择操作 */switchycase7:add;break;case 10:manage;break;case 13:search;break;case 16:sta;break;case 19:exit1 ;default:printf"Error";exit0 ;void add/* 显示 " 选择增加那种类型的信息" 的窗口 */int y ;_window ;gotoxy30,7 ;textbackgroundRED ;cprintf"Add Basic info";欢迎下载精品学习资源textbackgroundBLUE ;gotoxy30,10 ;cprintf"Add Purchase info";gotoxy30,13 ;cprintf"Add Borrow info";gotoxy30,16 ;cprintf"Back" ;gotoxy25, 2 ;textcolorRED ;highvideo ;cprintf"The Library Managemnt Program";normvideo ;gotoxy35,22 ;textcolorLIGHTGRAY;textbackgroundBLUE ;cprintf" Add Book ";textbackgroundBLUE ;textcolorWHITE ;y=choose7,16 ;switchy/* 选择增加信息类型的函数*/case 7 :addbook;break;/* 增加图书基本信息*/ case 10:addbuy;break;/* 增加图书购买信息 */case 13:addborrow ;break;/* 增加图书借阅信息 */case 16:menu;break;default:printf"Error";break;void addbook/* 增加图书基本信息*/int ky, sum = 0 ;FILE *fp ;bbasic binfo ;textbackgroundBLUE ;textcolorWHITE ;clrscr ;iffp = fopen"e:sum.dat","rb" .= NULL/* 读取图书基本信息数量sum*/fread&sum,2,1,fp ;欢迎下载精品学习资源fclosefp ;if fp = fopen"e:addbook.dat","ab" = NULLprintf"cannot write the addbook.dat";doclrscr ;gotoxy2,2 ;cprintf"Please input the classfication of chinese library classification:";scanf"%s",&binfo.type;getchar;gotoxy2,4 ;cprintf"Please input the book's number:" ;scanf"%s",&binfo.num;getchar;gotoxy2,6 ;cprintf"Please input the book's name:" ;scanf"%s",&binfo.name ;getchar;gotoxy2,8 ;cprintf"Please input the book's writer:";scanf"%s",&binfo.writer;getchar;gotoxy2,10 ;cprintf"Please input the the book's press:" ;scanf"%s",&binfo.press ;getchar;gotoxy2,12 ;cprintf"Please input the book's edition:";scanf"%s",&binfo.edition;getchar;gotoxy2,14 ;cprintf"Please input the book's publish time:";scanf"%s",&binfo.time;getchar;gotoxy2,16 ;cprintf"Please input the price:" ;scanf"%f",&binfo.price;getchar;gotoxy2,18 ;cprintf"Please input the ISBN of the book:";欢迎下载精品学习资源scanf"%s",&binfo.ISBN;getchar;gotoxy2,20 ;cprintf"Please input the count of books:";scanf"%d",&binfo.count;getchar;gotoxy2,22 ;cprintf"Please input the lend number of the book:";scanf"%d",&binfo.lendnum;getchar;gotoxy10,25 ;cprintf"Press Nn to finish add book or Press any key to add more book.";ky = key ;sum+;iffwrite&binfo,sizeofbbasic,1,fp .= 1clrscr ;printf"cannot save the data." ;whileky .= Key_N;fclosefp ;if fp = fopen"e:sum.dat","wb" = NULLprintf"cannot save the sum of the book." ;getch;exit0 ;iffwrite&sum,2,1,fp .= 1printf"fail to write the sum.dat.";getch;exit0 ; ;fclosefp ;menu;/*中图法分类号、 (要考虑多个作者情形) 、出版社、出版日期、ISBN 、版次、定价、馆藏数、借阅数等;*/void addbuy/* 增加图书购买信息 */欢迎下载精品学习资源int ky ;FILE *fp ;bpurchase pinfo;textbackgroundBLUE ;textcolorWHITE ;clrscr ;iffp = fopen"e:addbuy.dat","ab" = NULLprintf"cannot open the addbuy data." ;exit0 ;doclrscr ;gotoxy2,2 ;cprintf"Please input the book's name:" ;scanf"%s",&pinfo.name ;gotoxy2,4 ;cprintf"Please input the book's writer:";scanf"%s",&pinfo.writer;gotoxy2,6 ;cprintf"Please input the book's buy time:";scanf"%s",&pinfo.writer;gotoxy2,8 ;cprintf"Please input the number of the book buy:";scanf"%d",&pinfo.num;gotoxy2,10 ;cprintf"Please input the price:" ;scanf"%f",&pinfo.price;gotoxy2,12 ;cprintf"Please input the real money of buy the book:";scanf"%f", &pinfo.money;gotoxy2,14 ;cprintf"Please input the bill number:";scanf"%s", &pinfo.bill; gotoxy10,20 ;cprintf"Press Nn to finish add book or Press any key to add more book.";ky = key ;iffwrite&pinfo,sizeofpinfo,1,fp .= 1clrscr ;欢迎下载精品学习资源printf"cannot save the data." ;whileky .= Key_N;fclosefp ;menu;void addborrow/* 增加图书借阅信息 */int ky ;FILE *fp ;blend linfo ;textbackgroundBLUE ;textcolorWHITE ;clrscr ;iffp = fopen"e:addborrow.dat","ab" = NULLprintf"cannot open the addborrow data." ;exit0 ;doclrscr ;gotoxy2,2 ;cprintf"Please input the lend book's name:" ;scanf"%s",&linfo.name ;gotoxy2,4 ;cprintf"Please input the borrower's name:" ;scanf"%s",&linfo.person ;gotoxy2,6 ;cprintf"Please input the company of the borrower:";scanf"%s",&pany;gotoxy2,8 ;cprintf"Please input the borrower's card:" ;scanf"%s", &linfo.num;gotoxy2,10 ;cprintf"Please input the borrow timeex.2021/01/26:";scanf"%s", &linfo.btime;gotoxy2,12 ;cprintf"Please input the return timeex.2021/05/08:";scanf"%s", &linfo.rtime;欢迎下载精品学习资源gotoxy10,20 ;cprintf"Press Nn to finish add book or Press any key to add more book.";ky = key ;iffwrite&linfo,sizeoflinfo,1,fp .= 1clrscr ;printf"cannot save the data." ;whileky .= Key_N;fclosefp ;menu;struct linklist* create/* 创建链表 */int i, sum ;struct linklist *head, *p1, *p2;FILE *fp ;sum = readsum;p1 = struct linklist*mallocLEN;head = p2 = p1;if fp = fopen"e:addbook.dat","rb" = NULLprintf"cannot open the file." ;for i = 0 ; i < sum ; i+p2 = p1;p1 = struct linklist*mallocLEN;p2 -> next = p1 ;iffread&p2 -> binfo,sizeofbbasic,1,fp .= 1printf"cannot save the data." ;p2 -> next = NULL;fclosefp ;return head;欢迎下载精品学习资源void modifystruct linklist* p,*head;char find30 ;int i,ky,sum ;FILE *fp ;p= head = create;sum = readsum;clrscr ;printf"Plese input the name of the book you want to modify:";scanf"%s",find ;for i = 0 ;i<sum ;i+ifstrcmpfind,p -> binfo.name = 0gotoxy2,2 ;cprintf"Please input the classfication of chinese library classification:";scanf"%s",&p -> binfo.type;getchar;gotoxy2,4 ;cprintf"Please input the book's number:";scanf"%s",&p -> binfo.num; getchar;gotoxy2,6 ;cprintf"Please input the book's name:" ;scanf"%s",&p -> binfo.name;getchar;gotoxy2,8 ;cprintf"Please input the book's writer:";scanf"%s",&p -> binfo.writer;getchar;gotoxy2,10 ;cprintf"Please input the the book's press:" ;scanf"%s",&p -> binfo.press;getchar;gotoxy2,12 ;cprintf"Please input the book's edition:";scanf"%s",&p -> binfo.edition;getchar;gotoxy2,14 ;cprintf"Please input the book's publish time:";scanf"%s",&p -> binfo.time;欢迎下载精品学习资源getchar;gotoxy2,16 ;cprintf"Please input the price:" ;scanf"%f",&p -> binfo.price;getchar;gotoxy2,18 ;cprintf"Please input the ISBN of the book:";scanf"%s",&p -> binfo.ISBN;getchar;gotoxy2,20 ;cprintf"Please input the count of books:";scanf"%d",&p -> binfo.count; getchar;gotoxy2,22 ;cprintf"Please input the lend number of the book:";scanf"%d",&p -> binfo.lendnum;getchar;printf"Press Y to continue or Press anykey to back to menu.";ky = key ;ifky = Key_Y欢迎下载精品学习资源elsep = head;i = -1 ;clrscr ;printf"Plese input the name of the book you want to modify:";scanf"%s",find ;p = head;if fp = fopen"e:addbook.dat","wb" = NULL欢迎下载精品学习资源printf"cannot open addbook.dat" ;for i = 0 ;i <sum ; i+iffwrite&p -> binfo,sizeofbbasic,1,fp .= 1clrscr ;printf"cannot save the data." ;p = p -> next ;欢迎下载精品学习资源fclosefp ;menu;p = p -> next ;clrscr ;printf"cannot find the book.";getch;void deletestruct linklist* p1,*p2,*head;char find30 ;int i,ky,sum,flag = 0 ;FILE *fp ;p1 = p2 = head = create;sum = readsum;clrscr ;printf"Plese input the name of the book you want to Delete:";scanf"%s",find ;ifstrcmpfind,head -> binfo.name = 0欢迎下载精品学习资源elsehead = head ->next;sum-;flag = 1 ;for i = 0 ;i< sum ;i+欢迎下载精品学习资源p1 = p1 -> next ;ifstrcmpfind,p1 -> binfo.name = 0p1 = p1 -> next ;p2 -> next = p1 ;sum -;flag = 1 ;break;欢迎下载精品学习资源elsep2 = p2 -> next ;欢迎下载精品学习资源if flag .= 1printf"cannot find the book.";getch;menu;p1 = head;if fp = fopen"e:addbook.dat","wb" = NULLprintf"cannot open addbook.dat" ;for i = 0 ;i <sum ;i+iffwrite&p1 -> binfo,sizeofbbasic,1,fp .= 1clrscr ;printf"cannot save the data." ;p1 = p1 -> next ;fclosefp ;iffp = fopen"e:sum.dat","wb" = NULLprintf"cannot open sum.dat" ;iffwrite&sum,2,1,fp .= 1printf"fail to write the sum.dat.";getch;exit0 ;fclosefp