#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *fp;//定义文件指针fp,指向文件的起始地址
struct bbb
{
char name[10];
char writer[10];
char num[12];
char addr[8];
char time [8];
char price[8];
}book;
int main()
{
int t,i=1;
char menu();//菜单
void list();//显示
void input();//输入
void search1();//按书名查询
void search2();//按作者名查询
void modify();//修改
void del();//删除
printf("请输入登录号(1):\n");//登录号为1;
scanf("%d",&t);
if(t==1)
{ while(1)
{
switch(menu())
{
case '0':t=1;break;
case '1':input();break;
case '2':list();break;
case '3':search1();break;//bookname search
case '4':search2();break;//writer search
case '5':modify();break;
case '6':del();break;
case '7':exit(0);break;
default :break;
}
}
}
else printf("登录名错误!请重新输入:\n");main();//exit(1);
return 0;
} char menu()//显示菜单界面并
{
char n;
system("cls");
system ("color 1D");
printf("\t\t****************欢迎使用图书管理系统**************\n");
printf("\t\t* 丨 1.输入图书信息 丨*\n");
printf("\t\t* 丨 2.显示图书信息 丨*\n");
printf("\t\t* 丨 3.按书名查找图书信息 丨*\n");
printf("\t\t* 丨 4.按作者查找图书信息 丨*\n");
printf("\t\t* 丨 5.修改图书信息 丨*\n");
printf("\t\t* 丨 6.删除图书记录 丨*\n");
printf("\t\t* 丨 7.退出图书管理系统 丨*\n");
printf("\t\t************************************************\n");
printf(" 请选择菜单命令: ");
while(1)
{
do
{
fflush(stdin);//清除缓存
printf("\n输入菜单(1--7):");
scanf("%c",&n);
} while(n <'0' || n >'8'); //不满足条件继续重新输入,满足条件跳出循环结构程序流程向下
return n;//返回值返回给主函数,用以选择功能模块
}
}
void input()//录入
{
char ch;
fp = fopen("book.txt","ab");//以追加方式打开文件,如果文件不存在则建立该文件
do
{
fflush(stdin);
printf("请输入书名:");
scanf("%s",book.name);
printf("请输入作者:");
scanf("%s",book.writer);
printf("请输入图书编号:");
scanf("%s",book.num);
printf("请输入出版社:");
scanf("%s",book.addr);
printf("请输入出版时间:");
scanf("%s",book.time);
printf("请输入价格:");
scanf("%s",book.price);
printf("---------------------------------------------------------");
getchar();
fwrite(&book,sizeof(book),1,fp);
printf("\n是否继续输入新的图书信息?\n");
printf("请选择(Y/N):");
ch=getchar();
}while(ch == 'y' || ch == 'Y');
getchar();
printf("是否返回主菜单?按回车键返回");
getchar();
fclose(fp);//关闭文件防止数据丢失
}
void list()//显示
{ fp = fopen("book.txt","r");//以只读方式(r)
printf(" 书名 作者 分类号 出版单位 时间 价格\n");
while(fread(&book,sizeof(book),1,fp) == 1)
{
printf("%10s%8s",book.name,book.writer);
printf("%10s%8s%12s%10s\n",book.num,book.addr,book.time,book.price );
}
getchar();
printf("按回车键返回主菜单!");
getchar();//等待用户查看命令,按回车键返回
fclose(fp);//关闭文件
}
void search1()//bookname search
{
char name[10];
printf("请输入要查找的书名:");
fflush(stdin);//清除缓存
gets(name);
fp = fopen("book.txt","rb");//以二进制只读方式打开文件
while(!feof(fp))//判断文件是否到达末尾
{
fread(&book,sizeof(book),1,fp);
if(strcmp(name,book.name) == 0)
{
printf("已找到目标图书:\n");
printf(" 书名 作者 分类号 出版单位 时间 价格\n");
printf("%10s%10s ",book.name,book.writer);
printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price );
printf("\n按回车键返回主菜单\n");
getchar();//等待用户查看命令,按回车键流程向下
break;//跳出此条件语句
}
}
if(feof(fp))//判断文件指针是否指向文件末尾
{
printf("您所查询的图书不存在");
getchar();//等待用户查看信息,按回车键流程向下
}
fclose(fp); //关闭文件
fflush(stdin);//清除缓存
}
void search2()//writer search
{
char writer[10];
printf("请输入要查找的作者名:\n");
fflush(stdin);//清除缓存
gets(writer);
fp = fopen("book.txt","rb");//以二进制只读方式打开文件
while(!feof(fp))//判断文件是否到达末尾
{
fread(&book,sizeof(book),1,fp);
if(strcmp(writer,book.writer) == 0)
{
printf("已找到目标图书:\n");
printf(" 书名 作者 分类号 出版单位 时间 价格\n");
printf("%10s%10s ",book.name,book.writer);
printf("%10s%8s%10s%10s\n ",book.num,book.addr,book.time,book.price );
printf("\n按回车键返回主菜单");
getchar();//等待用户查看命令,按回车键流程向下
break;//跳出此条件语句
}
}
if(feof(fp))//判断文件指针是否指向文件末尾
{
printf("您所查询的图书不存在");
getchar();//等待用户查看信息,按回车键流程向下
}
fclose(fp); //关闭文件
fflush(stdin);//清除缓存
}
void modify()//修改
{
char modname[10],name[10],writer[10],numx[12],addrx[8],time[8],price[8];//定义临时的数组用来存放临时数据
int a,b,c,d,f,g=1;
int flag;
char ch;
FILE *fp1,*fp2;//声明两个文件指针fp1,fp2
printf("请输入修改的图书名:\n");
fflush(stdin);//清除缓存
gets(modname);
do
{
if((fp1 = fopen("book.txt","rb")) == NULL)//用只读方式打开一个二进制文件,如果返回的指针为空
{
printf("\n不能打开 book.txt文件");
getchar();
exit(1);//跳出此条件语句
}
if((fp2 = fopen("temp.txt","wb")) == NULL)//用只写方式打开一个二进制文件,如果返回的指针为空
{
printf("\n不能打开 book.txt文件");
getchar();
exit(1);//跳出此条件语句
}
printf("请输入要改的图书名\n");
gets(modname);
flag=0;
while(fread(&book,sizeof(book),1,fp1) == 1)
{
if(strcmp(book.name,modname) == 0)
{
printf("修改图书名吗?(1)");
scanf("%d",&a);
getchar();
if(a == 1)
{
printf("请输入图书名:");
gets(name);
strcpy(book.name, name);
}
printf("修改作者吗?(2)");
scanf("%d",&b);
getchar();//等待用户确认
if(b == 2)
{
printf("请输入作者:");
gets(writer);
strcpy(book.writer,writer);
}
printf("修改分类号吗?(3)");
scanf("%d",&c);
getchar();//等待用户确认
if(c == 3)
{
printf("请输入分类号:");
gets(numx);
strcpy(book.num,numx);
}
printf("修改出版单位吗?(4)");
scanf("%d",&d);
getchar(); if(d == 4)
{
printf("请输入出版单位:");
gets(addrx);
strcpy(book.addr,addrx);
}
printf("修改出版时间吗?(5)");
scanf("%d",&f);
getchar(); if(f == 5)
{
printf("请输入出版时间:");
gets(time);
strcpy(book.time,time);
}
printf("修改价格吗?(6)");
scanf("%d",&g);
getchar(); if(g == 6)
{
printf("请输入价格:");
gets(price);
strcpy(book.price,price);
}
flag=1; }
fwrite(&book,sizeof(book),1,fp2);//将数据作为一个整体一次性写入磁盘文件
}
fclose(fp1);
fclose(fp2);
if(flag == 1)
{
printf("修改成功");
remove("book.txt");//删除原文件
rename("temp.txt","book.txt");//将临时文件命名为book.txt
}
else
{
printf("找不到此记录");
getchar();
}
printf("继续修改吗?(y/n)");
ch=getchar();//接受字符
getchar();
}while(ch == 'Y' || ch == 'y');
}
void del()//删除
{
char name[10];
int flag;
char ch;
FILE *fp1,*fp2;//声明两个文件指针fp1,fp2
do
{
if((fp1 = fopen("book.txt","rb")) == NULL)
{
printf("\n不能打开 book.txt文件");
getchar();
exit(1);
}
if((fp2 = fopen("temp.txt","wb")) == NULL)
{
printf("\n不能打开 book.txt文件");
getchar();
exit(1);
}
printf("请输入要删除的图书名:");
fflush(stdin);//清除缓存
gets(name);
flag = 0;
while(!feof(fp1))//判断文件fp1是否指向文件末尾
{
fread(&book,sizeof(book),1,fp1);
if(strcmp(name,book.name) == 0)
{
flag = 1;
}
else
{
fwrite(&book,sizeof(book),1,fp2);//将数据作为一个整体一次性写入磁盘文件
}
}
fclose(fp1);//关闭文件
fclose(fp2);//关闭文件 if(flag == 1)
{
remove("book.txt");//移除文件
rename("temp.txt","book.txt");
printf("删除成功!\n");
}
else
{
printf("找不到图书名");
remove("temp.txt");//移除文件
}
printf("继续删除其他图书名吗?(y/n)");
fflush(stdin);//清除缓存
ch = getchar();
getchar();
}while(ch == 'y' || ch == 'Y');
fflush(stdin);//清除缓存
}

编译器为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. PPT资源

    PPT模板下载:www.1ppt.com/moban/ 行业PPT模板:www.1ppt.com/hangye/ 节日PPT模板:www.1ppt.com/jieri/ PPT素材下载:www.1pp ...

  2. PHP 如何自定义函数

    PHP 如何自定义函数 使用Function来自定义一个函数:格式如下:function function_name( $data ){ /** * 函数操作 */}注意:函数命名和自定义变量一样.只 ...

  3. 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.2(改进意见征集中)

    一.电商分类(平台+自营+复合) (1)平台型电商:淘宝+天猫+百度Mall等: (2)自营型电商: 2.1 综合型:京东(早期)+当当(早期): 2.2 垂直型:好像这种类型越来越少了: (3)复合 ...

  4. 【JVM】Class结构之常量池

    常量池 主要包括下面2类: 字面量(Literal):如int,double,String等: 符号引用(Symbolic Reference): 符号引用 类和接口的全限定名: 字段的名称和描述符: ...

  5. Jenkins小试

    之前有提到和同事搭建了个Git+Gerrit+Jenkins环境,可惜都在一台机器上,中间IT重装系统后就杯具了,没有备份,只好重来. 6月份项目发布了首个Open API,那时候建了个api uni ...

  6. Ring0 - 链表

    //一般驱动层不使用数据结构,一般Ring3层 双向链表可以将链表形成一个环.BLINK指针指向前一个元素,FLINK指针指向下一个元素.typedef struct _LIST_ENTRY { st ...

  7. Scrapy学习篇(三)之创建项目和Scrapy的安装

    安装Scrapy 了解了Scrapy的框架和部分命令行之后,创建项目,开始使用之前,当然是安装Scrapy框架了. 关于Scrapy框架的安装,请参考:https://cuiqingcai.com/5 ...

  8. go语言笔记——切片函数常见操作,增删改查和搜索、排序

    7.6.6 搜索及排序切片和数组 标准库提供了 sort 包来实现常见的搜索和排序操作.您可以使用 sort 包中的函数 func Ints(a []int) 来实现对 int 类型的切片排序.例如  ...

  9. QoS 服务质量

    一.QoS QoS: Quality of Service(服务质量) 是指网络通信过程中,允许用户业务在丢包率.延迟.抖动和带宽等方面获得可预期的服务水平.更简单地说:QoS就是针对各种不同需求,提 ...

  10. [UE4]优先级与相关性

    一.优先级 每个 Actor 都有一个名为 NetPriority 的浮点变量.这个变量的数值越大,Actor 相对于其他“同伴”的带宽就越多.和优先级为 1.0 的 Actor 相比,优先级是 2. ...