1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. FILE *fp;//定义文件指针fp,指向文件的起始地址
  5. struct bbb
  6. {
  7. char name[10];
  8. char writer[10];
  9. char num[12];
  10. char addr[8];
  11. char time [8];
  12. char price[8];
  13. }book;
  14. int main()
  15. {
  16. int t,i=1;
  17. char menu();//菜单
  18. void list();//显示
  19. void input();//输入
  20. void search1();//按书名查询
  21. void search2();//按作者名查询
  22. void modify();//修改
  23. void del();//删除
  24. printf("请输入登录号(1):\n");//登录号为1;
  25. scanf("%d",&t);
  26. if(t==1)
  27. {
  28. while(1)
  29. {
  30. switch(menu())
  31. {
  32. case '0':t=1;break;
  33. case '1':input();break;
  34. case '2':list();break;
  35. case '3':search1();break;//bookname search
  36. case '4':search2();break;//writer search
  37. case '5':modify();break;
  38. case '6':del();break;
  39. case '7':exit(0);break;
  40. default :break;
  41. }
  42. }
  43. }
  44. else printf("登录名错误!请重新输入:\n");main();//exit(1);
  45. return 0;
  46. }
  47. char menu()//显示菜单界面并
  48. {
  49. char n;
  50. system("cls");
  51. system ("color 1D");
  52. printf("\t\t****************欢迎使用图书管理系统**************\n");
  53. printf("\t\t* 丨 1.输入图书信息 丨*\n");
  54. printf("\t\t* 丨 2.显示图书信息 丨*\n");
  55. printf("\t\t* 丨 3.按书名查找图书信息 丨*\n");
  56. printf("\t\t* 丨 4.按作者查找图书信息 丨*\n");
  57. printf("\t\t* 丨 5.修改图书信息 丨*\n");
  58. printf("\t\t* 丨 6.删除图书记录 丨*\n");
  59. printf("\t\t* 丨 7.退出图书管理系统 丨*\n");
  60. printf("\t\t************************************************\n");
  61. printf(" 请选择菜单命令: ");
  62. while(1)
  63. {
  64. do
  65. {
  66. fflush(stdin);//清除缓存
  67. printf("\n输入菜单(1--7):");
  68. scanf("%c",&n);
  69. } while(n <'0' || n >'8'); //不满足条件继续重新输入,满足条件跳出循环结构程序流程向下
  70. return n;//返回值返回给主函数,用以选择功能模块
  71. }
  72. }
  73. void input()//录入
  74. {
  75. char ch;
  76. fp = fopen("book.txt","ab");//以追加方式打开文件,如果文件不存在则建立该文件
  77. do
  78. {
  79. fflush(stdin);
  80. printf("请输入书名:");
  81. scanf("%s",book.name);
  82. printf("请输入作者:");
  83. scanf("%s",book.writer);
  84. printf("请输入图书编号:");
  85. scanf("%s",book.num);
  86. printf("请输入出版社:");
  87. scanf("%s",book.addr);
  88. printf("请输入出版时间:");
  89. scanf("%s",book.time);
  90. printf("请输入价格:");
  91. scanf("%s",book.price);
  92. printf("---------------------------------------------------------");
  93. getchar();
  94. fwrite(&book,sizeof(book),1,fp);
  95. printf("\n是否继续输入新的图书信息?\n");
  96. printf("请选择(Y/N):");
  97. ch=getchar();
  98. }while(ch == 'y' || ch == 'Y');
  99. getchar();
  100. printf("是否返回主菜单?按回车键返回");
  101. getchar();
  102. fclose(fp);//关闭文件防止数据丢失
  103. }
  104. void list()//显示
  105. {
  106. fp = fopen("book.txt","r");//以只读方式(r)
  107. printf(" 书名 作者 分类号 出版单位 时间 价格\n");
  108. while(fread(&book,sizeof(book),1,fp) == 1)
  109. {
  110. printf("%10s%8s",book.name,book.writer);
  111. printf("%10s%8s%12s%10s\n",book.num,book.addr,book.time,book.price );
  112. }
  113. getchar();
  114. printf("按回车键返回主菜单!");
  115. getchar();//等待用户查看命令,按回车键返回
  116. fclose(fp);//关闭文件
  117. }
  118. void search1()//bookname search
  119. {
  120. char name[10];
  121. printf("请输入要查找的书名:");
  122. fflush(stdin);//清除缓存
  123. gets(name);
  124. fp = fopen("book.txt","rb");//以二进制只读方式打开文件
  125. while(!feof(fp))//判断文件是否到达末尾
  126. {
  127. fread(&book,sizeof(book),1,fp);
  128. if(strcmp(name,book.name) == 0)
  129. {
  130. printf("已找到目标图书:\n");
  131. printf(" 书名 作者 分类号 出版单位 时间 价格\n");
  132. printf("%10s%10s ",book.name,book.writer);
  133. printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price );
  134. printf("\n按回车键返回主菜单\n");
  135. getchar();//等待用户查看命令,按回车键流程向下
  136. break;//跳出此条件语句
  137. }
  138. }
  139. if(feof(fp))//判断文件指针是否指向文件末尾
  140. {
  141. printf("您所查询的图书不存在");
  142. getchar();//等待用户查看信息,按回车键流程向下
  143. }
  144. fclose(fp); //关闭文件
  145. fflush(stdin);//清除缓存
  146. }
  147. void search2()//writer search
  148. {
  149. char writer[10];
  150. printf("请输入要查找的作者名:\n");
  151. fflush(stdin);//清除缓存
  152. gets(writer);
  153. fp = fopen("book.txt","rb");//以二进制只读方式打开文件
  154. while(!feof(fp))//判断文件是否到达末尾
  155. {
  156. fread(&book,sizeof(book),1,fp);
  157. if(strcmp(writer,book.writer) == 0)
  158. {
  159. printf("已找到目标图书:\n");
  160. printf(" 书名 作者 分类号 出版单位 时间 价格\n");
  161. printf("%10s%10s ",book.name,book.writer);
  162. printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price );
  163. printf("\n按回车键返回主菜单");
  164. getchar();//等待用户查看命令,按回车键流程向下
  165. break;//跳出此条件语句
  166. }
  167. }
  168. if(feof(fp))//判断文件指针是否指向文件末尾
  169. {
  170. printf("您所查询的图书不存在");
  171. getchar();//等待用户查看信息,按回车键流程向下
  172. }
  173. fclose(fp); //关闭文件
  174. fflush(stdin);//清除缓存
  175. }
  176. void modify()//修改
  177. {
  178. char modname[10],name[10],writer[10],numx[12],addrx[8],time[8],price[8];//定义临时的数组用来存放临时数据
  179. int a,b,c,d,f,g=1;
  180. int flag;
  181. char ch;
  182. FILE *fp1,*fp2;//声明两个文件指针fp1,fp2
  183. printf("请输入修改的图书名:\n");
  184. fflush(stdin);//清除缓存
  185. gets(modname);
  186. do
  187. {
  188. if((fp1 = fopen("book.txt","rb")) == NULL)//用只读方式打开一个二进制文件,如果返回的指针为空
  189. {
  190. printf("\n不能打开 book.txt文件");
  191. getchar();
  192. exit(1);//跳出此条件语句
  193. }
  194. if((fp2 = fopen("temp.txt","wb")) == NULL)//用只写方式打开一个二进制文件,如果返回的指针为空
  195. {
  196. printf("\n不能打开 book.txt文件");
  197. getchar();
  198. exit(1);//跳出此条件语句
  199. }
  200. printf("请输入要改的图书名\n");
  201. gets(modname);
  202. flag=0;
  203. while(fread(&book,sizeof(book),1,fp1) == 1)
  204. {
  205. if(strcmp(book.name,modname) == 0)
  206. {
  207. printf("修改图书名吗?(1)");
  208. scanf("%d",&a);
  209. getchar();
  210. if(a == 1)
  211. {
  212. printf("请输入图书名:");
  213. gets(name);
  214. strcpy(book.name, name);
  215. }
  216. printf("修改作者吗?(2)");
  217. scanf("%d",&b);
  218. getchar();//等待用户确认
  219. if(b == 2)
  220. {
  221. printf("请输入作者:");
  222. gets(writer);
  223. strcpy(book.writer,writer);
  224. }
  225. printf("修改分类号吗?(3)");
  226. scanf("%d",&c);
  227. getchar();//等待用户确认
  228. if(c == 3)
  229. {
  230. printf("请输入分类号:");
  231. gets(numx);
  232. strcpy(book.num,numx);
  233. }
  234. printf("修改出版单位吗?(4)");
  235. scanf("%d",&d);
  236. getchar();
  237. if(d == 4)
  238. {
  239. printf("请输入出版单位:");
  240. gets(addrx);
  241. strcpy(book.addr,addrx);
  242. }
  243. printf("修改出版时间吗?(5)");
  244. scanf("%d",&f);
  245. getchar();
  246. if(f == 5)
  247. {
  248. printf("请输入出版时间:");
  249. gets(time);
  250. strcpy(book.time,time);
  251. }
  252. printf("修改价格吗?(6)");
  253. scanf("%d",&g);
  254. getchar();
  255. if(g == 6)
  256. {
  257. printf("请输入价格:");
  258. gets(price);
  259. strcpy(book.price,price);
  260. }
  261. flag=1;
  262. }
  263. fwrite(&book,sizeof(book),1,fp2);//将数据作为一个整体一次性写入磁盘文件
  264. }
  265. fclose(fp1);
  266. fclose(fp2);
  267. if(flag == 1)
  268. {
  269. printf("修改成功");
  270. remove("book.txt");//删除原文件
  271. rename("temp.txt","book.txt");//将临时文件命名为book.txt
  272. }
  273. else
  274. {
  275. printf("找不到此记录");
  276. getchar();
  277. }
  278. printf("继续修改吗?(y/n)");
  279. ch=getchar();//接受字符
  280. getchar();
  281. }while(ch == 'Y' || ch == 'y');
  282. }
  283. void del()//删除
  284. {
  285. char name[10];
  286. int flag;
  287. char ch;
  288. FILE *fp1,*fp2;//声明两个文件指针fp1,fp2
  289. do
  290. {
  291. if((fp1 = fopen("book.txt","rb")) == NULL)
  292. {
  293. printf("\n不能打开 book.txt文件");
  294. getchar();
  295. exit(1);
  296. }
  297. if((fp2 = fopen("temp.txt","wb")) == NULL)
  298. {
  299. printf("\n不能打开 book.txt文件");
  300. getchar();
  301. exit(1);
  302. }
  303. printf("请输入要删除的图书名:");
  304. fflush(stdin);//清除缓存
  305. gets(name);
  306. flag = 0;
  307. while(!feof(fp1))//判断文件fp1是否指向文件末尾
  308. {
  309. fread(&book,sizeof(book),1,fp1);
  310. if(strcmp(name,book.name) == 0)
  311. {
  312. flag = 1;
  313. }
  314. else
  315. {
  316. fwrite(&book,sizeof(book),1,fp2);//将数据作为一个整体一次性写入磁盘文件
  317. }
  318. }
  319. fclose(fp1);//关闭文件
  320. fclose(fp2);//关闭文件
  321. if(flag == 1)
  322. {
  323. remove("book.txt");//移除文件
  324. rename("temp.txt","book.txt");
  325. printf("删除成功!\n");
  326. }
  327. else
  328. {
  329. printf("找不到图书名");
  330. remove("temp.txt");//移除文件
  331. }
  332. printf("继续删除其他图书名吗?(y/n)");
  333. fflush(stdin);//清除缓存
  334. ch = getchar();
  335. getchar();
  336. }while(ch == 'y' || ch == 'Y');
  337. fflush(stdin);//清除缓存
  338. }

编译器为dev C++ ,第一次发多有不足,请指正。

[C基础修炼] [C课程设计]C语言课程设计之图书管理系统的更多相关文章

  1. [原]Java修炼 之 基础篇(二)Java语言构成

    上次的博文中Java修炼 之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成.        所谓的Java构成,主要是指Java运行环境的组成, ...

  2. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  3. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  4. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  5. C语言课程设计(成绩管理系统)

    C语言课程设计(成绩管理系统) 翻到了大学写的C语言课程设计,缅怀一下 内容: 增加学生成绩 查询学生成绩 删除 按照学生成绩进行排序 等 #include <stdio.h> #incl ...

  6. 大一C语言课程设计——班级档案管理系统

    记录我在大一第二学期期末做的C语言课程毕业设计 1. 班级档案管理系统运用到的主要结构体 typedef struct birthday //出生日期{int year;int month;int d ...

  7. C语言课程设计

    目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...

  8. 【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记

    先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了. 链接: https://blog.csdn.net/ ...

  9. 软件工程线上课程(C语言实践篇)学习心得总结

    林牧 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 软件工程的理 ...

随机推荐

  1. [Android] JNI中的Local Reference

    参考文章:<在 JNI 编程中避免内存泄漏> 一.Local Reference 深层解析 JNI Local Reference 的生命期是在 native method 的执行期(从 ...

  2. STL基础--流

    流 介绍 // cout: 全局ostream对象,(typedef basic_ostream<char> ostream) // <<: ostream& ostr ...

  3. Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional

    @Transactional标识类或方法,使方法被执行时使用事务方式执行,这里只讨论PROXY方法增强方法.使用@EnableTransactionManagement,默认model=AdviceM ...

  4. ping一个网段的cmd程序

    ping一个网段的cmd程序 今天发现只在cmd命令行工具中输入: FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i 即可.

  5. PHP7.1扩展开发入门

    第1步: 首先从官网下载了PHP源码http://am1.php.net/distributions/php-7.1.3.tar.bz2 第2步: 解压后可以看到根目录下面的ext文件夹里有ext_s ...

  6. centos7.0下增加swap分区大小

    承接上篇文章扩容磁盘空间后增加根分区的大小后,来扩容swap分区的空间 检查当前的swap分区情况 # free -m # free -g [root@localhost ~]# free -m to ...

  7. windows下GitHub的安装、配置以及项目的上传过程详细介绍

    概要 本文主要介绍了在Win10系统中安装Github终端.如何配置安装好的Git终端以及如何利用Git终端将自己的项目上传到远程服务器中 操作必备 win10系统电脑一台.良好的互联网连接.GitH ...

  8. scipy构建稀疏矩阵

    from scipy.sparse import csr_matrix import numpy as np indptr = np.array([0, 2, 3, 6]) indices = np. ...

  9. 第5章 IP地址和子网划分(3)_子网划分

    6.子网划分 6.1 地址浪费 (1)IPv4公网地址资源日益紧张,为减少浪费,使IP地址能够充分利用,就要用到子网划分技术. (2)传统上一个C类地址,如212.2.3.0/24,其可用的地址范围为 ...

  10. Spring IoC中各个注解的理解和使用

    一.把在Spring的xml文件中配置bean改为Spring的注解来配置bean 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的 ...