C语言图书馆管理系统课程设计

  • 格式:doc
  • 大小:128.50 KB
  • 文档页数:19

目录 一、需求分析 .................................... 错误!未定义书签。 二、概要设计 .................................... 错误!未定义书签。 三、详细设计 .................................... 错误!未定义书签。 四、调试分析 .................................................... 6 五、用户手册 .................................................... 6 六、测试数据 .................................................... 6 七、附录 ........................................................ 8 一、需求分析 1. 程序以菜单的方式工作,具备图书的添加、删除、修改、查询、统计操作,数据存储采用文件形式。 2.定义结构体数组struct library bookinf[30],用以存储ISBN、书名、作者名、图书类别、出版单位、出版时间、价钱、数量信息。利用文件开辟并将信息保存在“bookinf.txt”中。 3.用户从键盘输入需要的操作,其中“ISBN、书名、作者名、图书类别、出版单位”需使用字符输入,“出版时间、价格、数量”采用数字输入。 4.测试数据: (1)查找:若找到了所要查找的书本,则打印出书本信息;若没有找到,则打印“没有找到您要找的书本” (2)删除:若找到了所要查找的书本,按下y确认删除后,打印出“该书已删除”;若没有找到要删除的书本,则打印“没有找到该书,退出操作” (3)修改:若找到了要修改的书本,打印“请输入你要修改的信息”并开始修改;若没有找到要修改的书本,则打印“没有找到要修改的书本” 5.程序执行命令为: (1)创建“bookinf.txt”文件 (2)将图书信息用添加操作加进“bookinf.txt”文件中 (3)用户选择所需操作 (4)搜索结果

二、概要设计 1.定义结构体数组struct library bookinf[50]。 bookinf[i].ISBN // ISBN bookinf[i].name //书名 bookinf[i].author // 作者名 bookinf[i].vari // 图书类别 bookinf[i].pubplace //出版单位 bookinf[i].pubtime // 出版时间 bookinf[i].price //价格 bookinf[i].num // 数量 /* 用以下程序开辟存储文件"bookinf.txt" */ FILE *fp; if((fp=fopen("bookinf.txt","r+"))==NULL) { printf("无法打开文件!\n"); return; }

2.程序构造 add () 通过此函数将输入的书本信息添加存储进"bookinf.txt"文件中,用于下一次的查

询或删、改、统操作的调用。 del() 通过此函数完成对"bookinf.txt"文件中书本信息的删除,“printf("确定要删除该书吗?(y/n) \n");”键盘输入y/n确定书本信息的删除,删除后将不再有该书记录 modify() 通过此函数完成对书本信息的修改,修改内容包括:ISBN、书名、作者名、图书类别、出版单位、出版时间、价格、数量。 search() 此函数为查询书本信息操作,可查询"bookinf.txt"文件中存储的书本信息。 count() 此操作为统计操作,用于统计"bookinf.txt"文件中存储书本的总数量及金额数。 main() 通过对上述函数的调用,将所得信息打印出来 3.主程序流程 主函数

增加模块 删除模块 修改模块 查询模块 统计模块 三、详细设计 1.图书馆管理的数据类型 struct library{ char ISBN[20]; //ISBN char name[30]; //书名 char author[30]; //作者名 char vari[10]; //图书类别 char pubplace[50]; //出版单位 int pubtime; //出版时间 int price; //价格 int num; //数量 };

//----------基本操作的算法描述-------------------- 1.文件部分 FILE *fp; if((fp=fopen("bookinf.txt","r+"))==NULL) //检查打开的操作是否出错 { printf("无法打开文件!\n"); //若出错则打印该行文字 return; } 2.查询操作部分 printf("\n请输入您要查找的书名\n"); scanf("%s",bookname); //输入想查询的书名

while(!feof(fp)) //循环 直到文件尾部,函数值为真 { fread(&bookinf,sizeof(struct library),1,fp); //从fp中读入1个长度为sizeof(struct library)的数据,存到bookinf[ ]中 if(strcmp(bookinf.name,bookname)==0) //比较输入的书名和文件中保存的书名,若相同 {printf("ISBN 书名 作者名 图书类别 出版单位 出版时间 价格 数量\n");

printf("%s %s %s %s %s %d %d %d \n",bookinf.ISBN,bookinf.name,bookinf.author, bookinf.vari,bookinf.pubplace,bookinf.pubtime,bookinf.price,bookinf.num);//若相同,则打印出书本的信息 i=1;break;} } if(i!=1) //若没有找到该书 {printf("没有找到您要找的书本\n");} 3.删除部分 strcpy(bookinf[flag].ISBN,bookinf[flag+1].ISBN);//将后一本书的ISBN复制给前一本书的ISBN strcpy(bookinf[flag].name,bookinf[flag+1].name); //将后一本书的书名复制给前一本书的书名 strcpy(bookinf[flag].author,bookinf[flag+1].author); //将后一本书的作者名复制给前一本书的作者名 strcpy(bookinf[flag].vari,bookinf[flag+1].vari); //将后一本书的图书种类复制给前一本书的图书类别 strcpy(bookinf[flag].pubplace,bookinf[flag+1].pubplace); //将后一本书的出版单位复制给前一本书的出版单位 bookinf[flag].pubtime=bookinf[flag+1].pubtime; //将后一本书的出版时间复制给前一本书的出版时间 bookinf[flag].price=bookinf[flag+1].price; //将后一本书的价格复制给前一本书的价格 bookinf[flag].num=bookinf[flag+1].num; //将后一本书的数量复制给前一本书的数量 4.修改部分 if(strcmp(bookinf[i].ISBN,nbook)==0) //如果输入的书本nbook与文件中存储的ISBN相同,则开始修改

5.统计部分 int tn,total=0,alprice=0;//初始化总数和总价格的值为0 for(i=0;i<=tn;i++){ total=total+bookinf[i].num;//运用递归,新的总数和为上一次的总数值加上这一次的值 alprice=alprice+(bookinf[i].num)*(bookinf[i].price); //运用递归,新的总价钱和为上一次的总价钱值加上这一次的价钱 } printf("图书总册书为%d 总金额数为%d\n",total,alprice);//打印出图书总册书和总金额数

6.菜单部分 printf(" 欢迎登录图书管系统 \n"); printf("************************************\n"); printf("* 1.添加图书 2.删除图书 *\n"); printf("* 3.修改图书 4.查询图书 *\n"); printf("* 5.统计图书 0.退出系统 *\n"); printf("************************************\n");