




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南理工大学计算机学院课程设计说明书河南理工大学计算机科学与技术学院课程设计报告2015 2016学年第二学期教师评语:课设名称c语言程序设计课程设计课设题目图书信息管理系统学生姓名学号 专业班级计科合1504指导教师 2016年6月30日目 录1. 设计目的与要求-32. 总体设计-43. 主要功能算法-54. 完整程序及注释-95. 调试分析-216. 总结-271.1设计的目的使用链表和结构等结构数据,编写一c语言程序,实现图书信息管理的功能,通过此程序可对图书馆图书信息进行管理和维护等操作,给图书管理人员带来便利。1.2 设计的要求图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之提供以下功能:(1) 系统以菜单方式工作(2) 图书信息录入功能(3) 图书信息浏览功能(4) 查询和排序功能:按书名查找、按作者查找(5) 图书信息删除功能(6) 图书信息修改功能2.1总体设计根据题目要求,我们经过分析与讨论后,决定将此系统分为十个功能模块:(1) 菜单选择模块(2) 图书信息录入功能模块(3) 图书信息浏览功能模块(4) 图书信息查询功能模块(5) 图书信息排序功能模块(6) 图书信息删除功能模块(7) 图书信息修改功能模块(8) 图书数据保存功能模块(9) 信息文件打开功能模块(10) 退出系统功能模块3.1录入函数算法void insert () 输入继续添加输入价格输入出版日期输入出版单位输入分类号输入作者名输入书名输入登录号主菜单yn图一3.2按书名查找算法输入没有相同书名记录p-p-next主菜单显示图书信息 flag-1 p-pnextstrcmp(p-name,name)=0?p!=null?输入查询书名flag-0 p-hcadvoid search name() 按书名查找nyny图二void delete() 删除3.3删除图书信息算法输出没有该书输入图书登录号flag=1 p=q=*headpl=null&flag?yn yq=p;p=p-next&(p-an;an)=0?n显示图书信息y删除?y输入未删除y删除 flag=0继续删除n y主菜单图三 3.4显示函数算法输出记录为空回到主菜单显示图书信息p=null?p=headvoid scan ( ) 显示 y n图四图四4.0完整程序及注释#include /*引用库函数*/ #include # include # include # include # include typedefstructbook_info/定义图书信息的结构体变量并声明新的类型名 char an10; /*登录号*/ char name20; /*书名*/ char author20; /*作者名*/ char clc10; /*分类名*/ char company20; /*出版单位*/ char date20; /*出版日期*/ char price10; /*价格*/ structbook_info *next; booklist,*pointer;intnum=0;/全局变量的定义 pointer head=null;/头指针为空 file *fp;/指向文件的指针intmenu_select();/*主菜单函数*/ void insert(pointer * head);/*录入函数*/ void scan(pointer head);/*显示函数*/ void search_name(pointer head);/*按书名查找函数*/ void search_author(pointer head);/*按作者名查找函数*/ void listbyname(pointer *head);/*按书名排序函数*/ void delete(pointer * head);/删除函数 void update(pointer head);/修改函数 void save();/用文本文件形式保存函数 void read();/读入文本文件函数 void exit();/退出函数void main()/主函数 system(cls);/*运行前清屏*/ for(;) switch(menu_select() case 1:insert(& head); break; case 2:scan(head); break; case 3:search_name(head); break; case 4:search_author(head); break; case 5:listbyname(&head); break; case 6:delete(&head); break; case 7:update(head); break; case 8:save(); break; case 9:read(); break; case 0:exit(); default: putchar(a); menu_select()/主菜单函数 int a; printf(nttt欢迎使用图书信息管理系统nnnnnttc语言程序设计n学号:361509010421n姓名:段庆伟n班级:计科合1504n* 请按任意键进入系统菜单! * n); getch(); system(cls); printf(tt*menu*n);/主菜单printf(tt 1. 录入图书信息n); printf(tt 2. 浏览图书信息n); printf(tt 3. 按书名查询图书信息n); printf(tt 4. 按作者名查询图书信息n); printf(tt 5. 图书信息排序n); printf(tt 6. 删除图书信息n); printf(tt 7. 修改图书信息n); printf(tt 8. 图书数据保存n); printf(tt 9. 图书信息文件打开n); printf(tt 0. 退出n); printf(tt*n); do printf(nt请选择您所需要的服务:); scanf(%d,&a); while (a9); return a; void insert(pointer * head) /录入图书信息函数 char an10; char c; pointer p,q,r; printf(ntt* 请输入图书信息 *n);/*交互输入*/ printf(ntt请输入登录号:); scanf(%s,an); p=q= * head;/检测登录号是否重复while(p!=null) if(strcmp(p-an,an)=0) printf (已经有相同的登录号:);return; elseq=p;p=p-next; r=(pointer)malloc(sizeof(booklist); r-next=null; if(r=null) printf(分配空间失败!);return; if(q=null) * head=r;elseq-next=r; strcpy(r-an,an); printf(ntt输入书名:); /录入图书信息 scanf(%s,r-name); getchar(); printf(ntt输入作者名:); scanf(%s,r-author); getchar(); printf(ntt输入分类号:); scanf(%s,r-clc); getchar(); printf(ntt输入出版单位:); scanf(%s,r-company); getchar(); printf(ntt输入出版日期:);gets(r-date); printf(ntt输入价格:); scanf(%s,r-price); do printf(ntt录入成功!); num+; printf(选择是否继续录入(y/n)?:); /*连续录入图书信息*/ getchar(); scanf(%c,&c); if(c=y|c=y) insert(head); else if(c=n|c=n) return; elseprintf(ntt输入错误,请重新输入!); while(c!=y&c!=n&c!=y&c!=n); void scan(pointer head) /显示图书信息函数 pointer p; p=head; if(p=null) printf(记录为空);/检测是否有图书信息 else printf(nt共有%d条记录,num); while(p!=null) printf(nntt登录号:%-10s,p-an);/显示图书信息 printf(ntt书名: %-20s,p-name); printf(ntt作者名: %-20s,p-author); printf(ntt分类号: %-10s,p-clc); printf(ntt出版单位:%-20s,p-company); printf(ntt出版时间:%-20s,p-date); printf(ntt价格: ¥%-10s,p-price); p=p-next; printf(ntt请按任意键回到主菜单); return; void search_name(pointer head) /按书名查找函数 int flag=0;/标记变量的初值 char name10; pointer p; printf (n请输入需要查询的书名:); scanf(%s,name); printf(ntt* 以下是您查找的信息 *); p=head; while(p!=null) if(strcmp(p-name,name)=0)/查找符合的图书 printf(nt登录号: %-10s,p-an); printf(nt书名: %-20s,p-name); printf(nt作者名: %-20s,p-author); printf(nt分类号: %-10s,p-clc); printf(nt出版单位:%-20s,p-company); printf(nt出版时间:%-20s,p-date); printf(nt价格: ¥%-10s,p-price); flag=1;/找到标记变量设为1 p=p-next;/指针走到下一个节点 elsep=p-next; if(flag=0) printf(ntt没有相同书名纪录); printf(ntt请按任意键返回主菜单); getchar(); void search_author(pointer head) /按作者名查找函数 int flag=0; char author10; pointer p; printf (n请输入需要查询的作者名:); scanf(%s,author); printf(ntt* 以下是您查找的信息 *); p=head; while(p!=null)/查找符合的图书 if(strcmp(p-author,author)=0)/*找到图书显示信息*/ printf(nt登录号: %-10s,p-an); printf(nt书名: %-20s,p-name); printf(nt作者名: %-20s,p-author); printf(nt分类号: %-10s,p-clc); printf(nt出版单位:%-20s,p-company); printf(nt出版时间:%-20s,p-date); printf(nt价格: ¥%-10s,p-price); flag=1; p=p-next; elsep=p-next; if(flag=0) printf(ntt没有相同作者名纪录); printf(ntt请按任意键返回主菜单); getch(); void listbyname(pointer *head) /按书名排序函数 pointer p,q; inti,j; char t10; char c; if(head=null) printf(ntt没有任何资料!n); return; if(num=0)/检查是否存在数据可供排序 printf(ntt图书信息记录为空!请按任意键返回主菜单。); getchar(); return; p=q=*head; for(i=0;inum;i+)/排序 for (j=i+1;jnext;/使指针指向下一个结点 if(strcmp(q-name,p-name)0)/检查二者排序先后 /p指针对应数据应排于q指针对应数据后,p,q进行数据交换 strcpy(t,p-an); strcpy(p-an,q-an); strcpy(q-an,t); strcpy(t,p-author); strcpy(p-author,q-author); strcpy(q-author,t); strcpy(t,p-clc); strcpy(p-clc,q-clc); strcpy(q-clc,t);strcpy(t,p-company); strcpy(p-company,q-company); strcpy(q-company,t); strcpy(t,p-date); strcpy(p-date,q-date); strcpy(q-date,t); strcpy(t,p-name); strcpy(p-name,q-name); strcpy(q-name,t); strcpy(t,p-price); strcpy(p-price,q-price); strcpy(q-price,t); q=*head;p=*head; do printf(nt排序完成,是否显示(y/n)?:); /*询问是否显示排序结果*/ getchar(); scanf(%c,&c); if(c=y|c=y) scan(*head);/显示排序结果 else if(c=n|c=n) return;/返回主菜单 elseprintf(ntt输入错误,请重新输入!);/错误则继续询问 while(c!=y&c!=n&c!=y&c!=n); void delete(pointer *head)/*删除函数*/ int flag=1; char an10; charc,z; pointer p,q; printf(ntt* 图书删除 *n); printf(t请输入要删除图书的信息的登录号:); scanf(%s,an); p=q=*head;/*查找符合条件的图书*/ while(p!=null&flag) if(strcmp(p-an,an)=0)/*找到该图书*/ printf(tn登录号:%-10s,p-an);/显示即将要删除的图书的信息 printf(tn书名:%-20s,p-name); printf(tn作者名:%-20s,p-author); printf(tn分类号:%-10s,p-clc); printf(tn出版单位:%-20s,p-company); printf(tn出版时间:%-20s,p-date); printf(tn价格:¥%-10sn,p-price); printf(确定删除?确定请输y,其它则不删除);/询问是否删除 getchar(); scanf(%c,&z); if(z=y|z=y) if(p=*head) *head=p-next;free(p);/*删除图书信息*/ elseq-next=p-next;free(p); flag=0; elseprintf(图书信息未删除,返回主菜单。); return; elseq=p;p=p-next;/*指针走到下一个节点*/ printf(tt删除成功!n); if(flag) printf(t没有找到可以删除的数据!); do printf(选择是否继续删除(y/n)?:); /*连续删除图书信息*/ getchar(); scanf(%c,&c); if(c=y|c=y) delete(head);/*继续删除*/ else if(c=n|c=n) return;/*不删除返回主菜单*/ elseprintf(ntt输入错误,请重新输入!); while(c!=y&c!=n&c!=y&c!=n); void update(pointer head)/*图书信息修改函数*/ int flag=1; char an10; char c; pointer p; printf(ntt* 图书信息修改 *n); printf(t请输入要修改的图书的登录号:); scanf(%s,an);/*查找符合条件的图书*/ p=head; while(p!=null&flag) if(strcmp(p-an,an)=0) printf(ntt请输入登录号:);/*修改图书信息*/ scanf(%s,p-an); printf(ntt输入书名:); scanf(%s,p-name); getchar(); printf(ntt输入作者名:); scanf(%s,p-author); getchar(); printf(ntt输入分类号:); scanf(%s,p-clc); getchar();printf(ntt输入出版单位:); scanf(%s,p-company);getchar(); printf(ntt输入出版日期:); gets(p-date); printf(ntt输入价格:); scanf(%s,p-price); flag=0; printf(修改成功!n); elsep=p-next;/*指针走到下一个节点*/ if(flag) printf(ntt没有该图书记录!); do printf(选择是否继续修改(y/n)?:); /*连续修改图书信息*/ getchar(); scanf(%c,&c); if(c=y|c=y) update(head);/*继续修改*/ elseif(c=n|c=n) return;/不修改,返回菜单 elseprintf(ntt输入错误,请重新输入!); while(c!=y&c!=n&c!=y&c!=n);/输入错误则继续询问void save() /*以文本文件形式保存的函数*/ pointer p; p=head; char file20; /*用来存放文件保存路径以及文件名*/printf(请输入文件路径及文件名:); scanf(%s,file); if(fp=fopen(file,w+)=null)/*判断能否打开文件*/ printf(不能打开文件!n); return; while(p!=null) fprintf(fp,%st%st%st%st%st%st%sn,p-an,p-name,p-author,p-clc,p-company,p-date,p-price);/将数据写入文件 p=p-next;/*下移一个结点*/ fclose(fp);/写入完成,关闭文件 printf(文件已经保存!n); return; void read()/*读入文本文件的函数*/ pointer p,q; int m=0; char file20; printf(请输入文件路径及文件名:); scanf(%s,file);/*输入文件路径及名称*/if(fp=fopen(file,r+)=null)/检查文件是否存在 printf(不能打开文件!n); return; m=m+1; if(m=1) p=(pointer)malloc(sizeof(booklist);/*开辟一个新单元*/ head=p;/将p的地址赋给头指针head fscanf(fp,%st%st%st%st%st%st%stn,&p-an,&p-name,&p-author,&p-clc,&p-company,&p-date,&p-price);/*文件读入*/ donum=num+1;/记录书籍信息量 if(num=1) /区别开链表开头与中间的处理方法 head-next=p; else q-next=p; q=p; p=(pointer)malloc(sizeof(booklist); /*开辟一个新单元*/ fscanf(fp,%st%st%st%st%st%st%stn,&p-an,&p-name,&p-author,&p-clc,&p-company,&p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 23001-11:2023/Amd 2:2025 EN Information technology - MPEG systems technologies - Part 11: Energy-efficient media consumption (green metadata) - Amendment 2: Energy-e
- 应急安全教育培训制度课件
- 应急安全培训师课件
- 2025山东省肥城市中考数学能力检测试卷及答案详解(考点梳理)
- 2024-2025学年度反射疗法师大赛理论通关题库附答案详解【基础题】
- 买房煤气合同(标准版)
- 传染病疑似病例早期识别与护理观察要点
- 中药面膜合同(标准版)
- 2025年乐山马边彝族自治县事业单位考核招聘18人笔试备考题库及答案详解一套
- 2024年自考专业(汉语言文学)题库及参考答案详解【基础题】
- 冰箱温度监测登记表
- 5G边缘云计算技术
- 现代市场营销(第四版) 课件全套 单元1-12 认知市场营销-市场营销计划、组织、执行与控制
- 病历复制授权委托书
- 牙周病课件:根分叉病变(Furcation Involvement)
- 【课程思政示范课】《“博远计划”素质教育课》课程
- 环境保护及文明施工措施
- 原来我也很坚强中考满分作文5篇
- 施工项目管理手册范本
- 新安天玉混炼胶产品
- JIS G3507-1-2021 冷镦用碳素钢.第1部分:线材
评论
0/150
提交评论