这个貌似是我们大一的C语言课程设计,当时是从网上下的代码,然后修改了一下.现在想想好惭愧,哎我好想重新开始,以前自己的确失去了好多东西,希望今后的自己好好......
时间过的真快,现在都大三了,马上也要滚蛋了,再滚蛋之前好好修炼内功.于是我又重新拾起了久违的C语言,用了几天时间认真看完了Programming in c,个人觉得这本书讲得真好,
收益亮多.回想起大一学的C语言,我们用的教材是学校自己编的,往事不堪回首啊....记得上学期我们学习数字信号处理,我么用的也是学校自己编的书,当时上课最有特色的地方就是:我们那个老师每节课都要花好长时间纠正书里的错误,他经常说的一句话是-还好当时我没参加编写这本书,不然还不被骂死.......
我始终想不明白的是有那么多经典的好书,学校不用,非要自己去编那么操蛋的书.这学期我们学习XML应用教材,当时老师说本来想用那本书的,觉得很好.最后学校不同意,理由竟是:那本是高职的书,我们是本科....我听完泪流满面啊.我们的大学,我们的老师,你们什么时候才能不浮躁???
哎,本来我不想说什么,但已经到这个地步了,就再多废话几句吧.我们学了微机原理,老师没在课上编过.调试过一个程序,那么经典的debug工具都不提...;我们学了计算机网络,天天讲各种包,老师从没在课上用抓包软件抓过一个包,分析过一个包...;我们学了组网技术,老师给我的模拟器不知道是哪一年的,ospf都不支持,天天说cisco,没介绍过packettracer, dynamips...泪流满面啊,我们的学校很差,但真的差到这个地步了吗? 老师们,你们每天都在想什么了,能不浮躁吗? 天天说上课学生不听讲,天天说上课人数少,为什么呀?我们学生是有问题,但你们呢?
你们真的对得起你们拿的工资吗?
哎,话多了.一个学生的牢骚而已....
stop,不说了,呵呵.
主要是想起了大一做的课程设计,所以自己动手做了下,不过我这个事简化版,呵呵,温故而知新.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define books "f:\\books.txt"
#define booksbak "f:\\booksbak.txt"
struct bookinfo
{
char isbn[20];
char title[30];
char author[20];
int count;
};
struct book
{
struct bookinfo onebook;
struct book *next;
};
struct book *searchBook ( struct book *listptr,char isbn[])
{
while(listptr!=(struct book *)0)
if (strcmp(listptr->onebook.isbn,isbn)==0)
return listptr;
else
listptr=listptr->next;
return (struct book *)0;
}
void MainSearchbook(struct book *firstptr)
{
struct book *ptr;
char isbnno[20];
printf("请输入ISBN:");
scanf("%s",&isbnno);
ptr=searchBook(firstptr,isbnno);
if (ptr!=(struct book *)0)
{
printf("找到了!!!\n");
printf("ISBN:%s\n",ptr->onebook.isbn);
printf("Title:%s\n",ptr->onebook.title);
printf("Author:%s\n",ptr->onebook.author);
}
else
printf("sorry,not found!!!\n");
}
int addBook(struct book *listptr,struct bookinfo note)
{
while(listptr->next!=0)
listptr=listptr->next;
listptr->next=(struct book *)malloc(sizeof(struct book));
listptr->next->onebook=note;
listptr->next->next=0;
return 0;
}
void MainAdd(struct book *listptr,FILE *fp)
{
int ok;
struct bookinfo note;
printf("请输入ISBN:");
scanf("%s",¬e.isbn);
printf("请输入Title:");
scanf("%s",¬e.title);
printf("请输入Author:");
scanf("%s",¬e.author);
ok=addBook(listptr,note);
if (ok==0)
{
//将加入的图书写到文件中保存
fprintf(fp,"\n%s %s %s %d",note.isbn,note.title,note.author,0);
printf("添加图书成功!!!\n");
}
else
printf("添加图书失败!!!\n");
}
int removeBook(struct book *listptr,char isbn[])
{
while(listptr->next!=(struct book *)0)
{
if (strcmp(listptr->next->onebook.isbn,isbn)==0)
{
listptr->next=listptr->next->next;
return 0;
}
else
listptr=listptr->next;
}
return -1;
}
void MainRemove(struct book *listptr,FILE *fp)
/************************************************************************/
/* 删除书籍函数,通过ISBN删除链表节点,同时删除文件中对应信息 */
/* 删除文件中一行,用的是笨方法,把需要的信息写到新文件,删除旧文件,重命名..*/
/************************************************************************/
{
char isbnno[20];
int ok;
struct bookinfo onebook;
printf("请输入ISBN:");
scanf("%s",&isbnno);
ok=removeBook(listptr,isbnno);
if (!ok)
{
FILE *fpbak;
if ((fpbak=fopen(booksbak,"a+"))==NULL)
printf("文件打开失败!!!\n");
fseek(fp,0,SEEK_SET); //移到文件开始
while((fscanf(fp,"%s %s %s %d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
if (strcmp(onebook.isbn,isbnno)!=0)
{
fprintf(fpbak,"%s %s %s %d\n",onebook.isbn,onebook.title,onebook.author,onebook.count);
}
}
fclose(fp);
fclose(fpbak);
if (remove(books)) //删除失败返回非0
{
printf("删除文件失败!!!\n");
return ;
}
else
if (rename(booksbak,books)) //重命名失败返回非0值
{
printf("重命名失败!!!\n");
return ;
}
printf("删除成功!!!\n");
}
else
printf("查无此书!!!");
}
int choice(void)
{
int c;
printf("1.查看图书\n");
printf("2.添加图书\n");
printf("3.删除图书\n");
printf("4.退出程序\n");
printf("请选择序号:");
return c=getchar();
//return c=getche();
printf("\n\n");
}
int addEntry(FILE *fp,struct book *firstptr)
/************************************************************************/
/* 主要用来加载文件中存放的图书信息 */
/************************************************************************/
{
struct bookinfo onebook;
while((fscanf(fp,"%s %s %s %d\n",&onebook.isbn,&onebook.title,&onebook.author,&onebook.count))!=EOF)
{
while(firstptr->next!=0)
firstptr=firstptr->next;
firstptr->next=(struct book *)malloc(sizeof(struct book));
firstptr->next->onebook=onebook;
firstptr->next->next=0;
}
return 0;
}
int main(int argc,char *argv[])
{
int ch;
struct book first;
strcpy(first.onebook.isbn,"123456");
strcpy(first.onebook.title,"Programming C");
strcpy(first.onebook.author,"yhb");
first.next=0;
struct book *firstptr=&first; //链表头指针
FILE *fp;
if ((fp=fopen(books,"a+"))==NULL)
printf("文件打开失败!!!");
addEntry(fp,firstptr);
while(1)
{
system("CLS"); //清屏
/************************************************************************/
/* 想想这里为什么要清空缓冲区? */
/*由于上一次(choice函数)的getchar(),还有一个'\n'留在缓冲区.... */
/*可以把这句话注释掉看看,没有这句话会遇到麻烦 */
/*如果不用fflush,可以将上面的getchar()换成getche() */
/*比较getchar(),getch(),getche()...... */
/************************************************************************/
fflush(stdin);
ch=choice()-48;
switch (ch)
{
case 1:
MainSearchbook(firstptr);
break;
case 2:
MainAdd(firstptr,fp);
break;
case 3:
MainRemove(firstptr,fp);
break;
case 4:
printf("谢谢使用...\n");
exit(0);
default:
printf("请输入正确序号!");
}
system("PAUSE");
}
return 0;
}
bookinfo结构体的count成员,本来是想做最近热门图书的, 通过用户查看书籍,统计书籍浏览的次数.发现更新文件中的数据很麻烦,于是就取消了.呵呵
books.txt里面的数据大致如下所示:可以直接通过编辑books.txt增加书籍.
123 python yhb 2
456 linux lwy 4
789 c yl 5
文件操作用fread,fwrite应该更方便点.
分享到:
相关推荐
C语言双向链表 -------------------------------------------精品
用C语言实现的链表基本操作和图书管理系统程序
大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...
用c语言,链表结构,实现一个学生管理系统,并将信息保存到本地文件。
C语言程序设计-职工信息管理系统(链表).docxC语言程序设计-职工信息管理系统(链表).docxC语言程序设计-职工信息管理系统(链表).docxC语言程序设计-职工信息管理系统(链表).docxC语言程序设计-职工信息管理系统(链表)...
该超市管理系统使用C语言开发,用到了链表和文件的操作。该项目共支持三种类型的用户账户,root管理员,普通管理员,普通用户三种,实现了超市商品的进货,出售以及注册账号等的常用功能。
C语言图书管理系统 链表操作 文件文件
c语言-学生成绩管理系统-链表实现-源码
链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序
链表的应用---队列的实现**插入在链尾,删除在链头 数据结构--队列的实现(链队)--带头节点
用C语言链表实现进程转换,阻塞变就绪,就绪变执行,执行变阻塞三种状态的转换
c语言链表的排序算法-排序链表最快的算法是什么?.pdf
C语言期末大作业-用链表实现图书管理系统 需求概述: 用链表实现《图书管理系统》,基本功能包括: 1.添加图书记录 2.删除图书记录 3.修改图书记录 4.存盘 5.读盘 6.以书号建立索引 7.以书号检索图书 8.以书名等其他...
基于C语言链表和文件的企业员工管理系统
利用链表的基本操作来实现多项式的乘法 用c语言编写
基于链表对文件进行读写的C语言图书管理系统
C语言之航空信息查询系统-使用双向循环链表实现系统的增删改查操作
简单的用链表来实现图书的增删该查功能,更能明白链表的原理……
用C链表编写的最简单的图书馆管理系统,使用函数编程,演示链表的插入,删除,遍历查找。
C语言链表的应用,包括建立链表、删除链表、插入/删除元素操作