C语言课程设计实验报告
C 语言课程设计实验报告
名称:图书信息管理系统设计 姓名:洪静怡 学号:1211200222 班级:通信1202
学院:信息与电子工程学院 日期:2013.07.05
目录
一、实验环境 ------------------------------------------------------------------------------------------------------ 1 二、实验目的和要求 --------------------------------------------------------------------------------------------- 1 1、实验目的: ---------------------------------------------------------------------------------------------------- 1 2、实验要求: ---------------------------------------------------------------------------------------------------- 1 三、实验内容和结果 --------------------------------------------------------------------------------------------- 2
1、程序整体功能 ------------------------------------------------------------------------------------------- 2 2、程序组成及各模块/函数功能 ----------------------------------------------------------------------- 3 3、重要数据结构,重要模块/函数算法; ---------------------------------------------------------- 4
①读取数据模块: ----------------------------------------------------------------------------------- 4 ②菜单模块: ----------------------------------------------------------------------------------------- 4 ③浏览模块: ----------------------------------------------------------------------------------------- 5 ④查找模块: ----------------------------------------------------------------------------------------- 6 ⑤增加模块: ----------------------------------------------------------------------------------------- 7 ⑥删除模块: ----------------------------------------------------------------------------------------- 8 ⑦修改模块: ----------------------------------------------------------------------------------------- 9 ⑧排序模块: ---------------------------------------------------------------------------------------- 11 ⑨保存、退出模块: ------------------------------------------------------------------------------- 12 4、程序的运行和测试结果 ------------------------------------------------------------------------------ 13
(1)初始界面 --------------------------------------------------------------------------------------- 13 (2)菜单界面测试: ------------------------------------------------------------------------------ 13 (3)浏览功能测试 --------------------------------------------------------------------------------- 14 (4)查询功能测试 --------------------------------------------------------------------------------- 14 (5)增加功能测试 --------------------------------------------------------------------------------- 15 (6)删除功能测试 --------------------------------------------------------------------------------- 16 (7)修改功能测试 --------------------------------------------------------------------------------- 17 (8)排序功能测试 --------------------------------------------------------------------------------- 18
四、 实验中的问题及心得 ------------------------------------------------------------------------------------ 19 五、 附录(程序清单) --------------------------------------------------------------------------------------- 20 六、 评分 ---------------------------------------------------------------------------------------------------------- 31
图书管理系统设计
同组(所有)学生:洪静怡 通信1202 学号1211200222 实验地点:现代教育技术中心301
实验日期和时间:2013年7月1日-7月5日 实验类别:课程设计 实验类型:设计性
一、实验环境
运行的操作系统:windows XP
编程工具:Microsoft Visual C++ 6.0 集成开发环境: 桌号:
机器的IP 地址:
二、实验目的和要求
1、实验目的:
(1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、
存储结构和操作算法。
(2)使学生进一步掌握程序设计、编写、调试能力。 (3)使学生了解软件开发的基本步骤和内容。
2、实验要求:完成一个图书信息管理系统设计程序,具体内容如下: (1)在内存中用链表记录,在硬盘上用二进制文件保存。
(2)设计完的程序能够以命令行或者菜单形式增加、删除、更新和查询数据的
内容。数据内容能够排序以方便查询。 (3)数据库中应该有至少20条记录。
三、实验内容和结果
1、程序整体功能
2、程序组成及各模块/函数功能
2.1功能模块设计(浏览,查找,增加,删除,排序,保存)
2.2 接口模块设计
3、重要数据结构,重要模块/函数算法; ①读取数据模块:从文件中读取书籍信息到链表中
void ReadInfoFormFile(void) {
FILE *fp; book *p;
fp=fopen("new.txt","rb"); if(!fp) {
printf("文件不存在, 请创建文件后重新开启!!!\n"); system("pause"); return; }
p=MallocNode();
while(fread(&p,sizeof(book),1,fp)>0) {
InsertOneNode(p); p=MallocNode(); }
fclose(fp); }
②菜单模块:显示菜单,根据用户的输入完成相应的功能
void DesplayMenu(void) {
book *p;
logo("请选择相应功能"); printf("\n\n\n");
printf("******************************************************************************\n");
printf(" 图书信息管理系统\n\n"); printf(" 1 显示所有书籍的信息\n"); printf(" 2 按书籍名查询\n"); printf(" 3 按作者名查询\n"); printf(" 4 增加书籍\n"); printf(" 5 删除书籍\n");
printf(" 6 按书籍名修改书籍信息\n"); printf(" 7 按登录号修改书籍信息\n");
printf(" 8 按价格排序并输出信息\n"); printf(" 9 保存后退出\n");
printf("******************************************************************************\n\n\n");
printf("请选择操作:");
scanf("%d",&choose); /*取得用户的选择*/ switch(choose) {
case 1: OutputInformation(); /*显示所有书籍的信息*/ break;
case 2: DesplayInfoBybookName(); break;
case 3: DesplayInfoBywriterName(); /*根据用户输入的登录号显示该信息*/ break;
case 4: p=MallocNode(); /*先申请一个新结点*/
GetInformation(p); /*要求用户输入信息到新结点中*/ InsertOneNode(p); /*将新结点加到链表中*/ break;
case 5: DeleteNodeBybookNumber(); /*根据用户输入的登录号删除该书籍*/ break;
case 6: ChangeMarkByName(); /*根据用户输入的书籍名修改书籍*/ break;
case 7: ChangeMarkByNumber(); /*根据用户输入的登录号修改书籍*/ break;
case 8: CompositorByMark1(); /*根据书籍价格的高低进行排序*/ break;
case 9: SaveLinkToFile(); /*保存数据后再退出*/ free(headLink); exit(0); break; default: break; }
DesplayMenu(); /*递归调用*/ }
③浏览模块:显示所有书籍的信息
void OutputInformation(void) {
book *p;
p=headLink->next;
if(p==NULL) /*如果指针为空*/ {
printf("现在没有书籍信息,请先输入书籍信息\n\n");
system("pause"); return; }
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n"); while(p) {
DesplayOneNode(p);
p=p->next; /*指针指向下一个*/ printf("\n"); }
system("pause"); }
④查找模块:(1)根据用户输入的书名显示该书籍的信息;(2)根据用户输入的作者名显示该书籍的信息
(1)void DesplayInfoBybookName(void)
{
book *p;
char bookName[20]; char flag=0;
p=headLink->next;
printf("请输入书籍名:\n"); scanf("%s",&bookName); while(p) {
if(strcmp(p->bookName,bookName)==0) /*将现读取的书籍名与原来的替换*/
{
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n");
DesplayOneNode(p); system("pause"); flag=1; break; }
p=p->next; }
if(!flag)
printf("对不起,不存在书籍名为 %s 的书籍\n",bookName);
}
(2)void DesplayInfoBywriterName(void)
{
book *p;
char writerName[20]; char flag=0;
p = headLink->next;
printf("请输入作者名:\n"); scanf("%s",&writerName); while(p) {
if(strcmp(p->writerName,writerName)==0) {
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n");
DesplayOneNode(p); system("pause"); flag=1; break; }
p=p->next; }
if(!flag)
printf("对不起,不存在登录号为 %s 的书籍\n",writerName);
}
⑤增加模块:(1)申请一个新结点,并将其初始化;(2)取得用户输入的书籍信息;(3)在链表的结尾处增加一个结点
(1)book *MallocNode(void)
{
book *p; int i;
p=(book*)malloc(sizeof(book)); /*给p 分配book 大小的book 型空间*/ if(p==NULL)
return NULL; for(i=0;i
p->bookNumber[i]='\0'; for(i=0;i
p->bookName[i]='\0'; for(i=0;i
p->writerName[i]='\0'; p->mark1=0; p->kind=0; p->mark2=0;
p->next=NULL; return p; }
(2)void GetInformation(book *t)
{
printf("请输入书籍登录号:\n"); scanf("%s",t->bookNumber); printf("请输入书名:\n"); scanf("%s",t->bookName);
printf("请输入该书籍作者名;\n"); scanf("%s",t->writerName);
printf("请输入该出版社名:\n"); scanf("%s",t->bookconcernName); printf("请输入价格:\n"); scanf("%f",&(t->mark1));
printf("请输入分类号(A 办公类 B 文学类 C 商务类 D科学历史类):\n"); scanf("%s",&(t->kind));
printf("请输入出版时间(年. 月) :\n"); scanf("%f",&(t->mark2)); system("pause");
}
(3)void InsertOneNode(book *t)
{
book *p; p=headLink; while(p->next) {
p=p->next; }
p->next=t;
}
⑥删除模块:根据用户输入的登录号删除该书籍
void DeleteNodeBybookNumber(void) {
char bookNumber[10]; book *p,*q; char flag=0;
printf("请输入要删除的书籍登录号:"); scanf("%s",&bookNumber); p=headLink;
q=headLink->next; while(q)
}
if(strcmp(q->bookNumber,bookNumber)==0) {
p->next=q->next; free(q); flag=1;
system("pause"); break; }
p=p->next; q=q->next; }
if(!flag) {
printf("不存在该登录号的书籍\n"); return; }
printf("成功删除\n"); system("pause");
⑦修改模块:(1)根据输入的书籍名修改信息;(2)根据输入的登录号修改信息
(1)void ChangeMarkByName(void)
{
book *p;
char bookName[20]; char flag=0; float mark1; char kind; float mark2;
p=headLink->next;
printf("请输入书名:\n"); scanf("%s",&bookName); while(p) {
if(strcmp(p->bookName,bookName)==0) {
printf("请输入新的价格:\n"); scanf("%f",&mark1);
printf("请输入新的分类号(A 办公类 B 文学类 C 商务类 D科学历史类):\n");
printf("请输入新的出版时间(年. 月) :\n"); scanf("%f",&mark2); p->mark1=mark1; p->kind=kind; p->mark2=mark2; flag=1;
printf("修改成功\n"); system("pause"); break; }
p=p->next; }
if(!flag)
printf("对不起,不存在书籍名为 %s 的书籍\n",bookName); }
(2)void ChangeMarkByNumber(void)
{
book *p;
char bookNumber[20]; char flag=0; float mark1; char kind; float mark2;
p=headLink->next;
printf("请输入书籍登录号:\n"); scanf("%s",bookNumber); while(p) {
if(strcmp(p->bookNumber,bookNumber)==0) {
printf("请输入新的价格:\n"); scanf("%f",&mark1); printf("请输入新的分类号(A 办公类 B 文学类 C 商务类 D科学历史类):\n");
scanf("%s",&kind);
printf("请输入新的出版时间(年. 月) :\n"); scanf("%f",&mark2); p->mark1=mark1; p->kind=kind; p->mark2=mark2; flag=1;
printf("修改成功\n"); system("pause");
}
p=p->next; }
if(!flag)
printf("对不起,不存在登录号为 %s 的书籍\n",bookNumber); }
⑧排序模块:按价格排序
void CompositorByMark1(void) {
book exchange,*r,*p,*q; r=headLink->next; if(r==NULL) {
printf("现在还没书籍信息, 请先输入书籍信息\n"); return; }
while(r) /*两层while 循环实现排序*/ {
p=r; q=r->next; while(q) {
if((q->mark1)>(p->mark1)) {
strcpy(exchange.bookNumber,q->bookNumber);/*先复制q 结点信息到
exchange*/
strcpy(exchange.bookName,q->bookName); strcpy(exchange.writerName,q->writerName); exchange.mark1=q->mark1; exchange.kind=q->kind; exchange.mark2=q->mark2;
strcpy(q->bookNumber,p->bookNumber); /*再复制p 结点信息到q*/ strcpy(q->bookName,p->bookName); strcpy(q->writerName,p->writerName); q->mark1=p->mark1; q->kind=p->kind; q->mark2=p->mark2;
strcpy(p->bookNumber,exchange.bookNumber); /*最后复制exchange
结点信息到p*/
strcpy(p->bookName,exchange.bookName); strcpy(p->writerName,exchange.writerName);
p->mark1=exchange.mark1; p->kind=exchange.kind; p->mark2=exchange.mark2; }
q=q->next; }
r=r->next; }
OutputInformation();
}
⑨保存、退出模块:保存链表数据到文件中
void SaveLinkToFile(void) {
book *p; FILE *fp;
p=headLink->next; if(p==NULL) {
printf("注意:没有书籍信息!!!继续操作推出!\n\n"); system("pause"); return; }
fp=fopen("new.txt","wb"); if(!fp) {
printf("文件不存在\n"); return; }
while(p) {
fprintf(fp,"%8s",p->bookNumber); fprintf(fp,"%8s",p->bookName);
fprintf(fp,"%8s",p->bookconcernName); fprintf(fp,"%8s",p->writerName); fprintf(fp,"%8.1f",p->mark1); fprintf(fp,"%8c",p->kind); fprintf(fp,"%8.2f",p->mark2); fprintf(fp,"\n"); p=p->next; }
fclose(fp);
printf("保存成功,按任意键安全退出");
}
4、程序的运行和测试结果
(1)初始界面
(2)菜单界面测试:
(3)浏览功能测试
(4)查询功能测试
(5)增加功能测试
(8)排序功能测试
四、实验中的问题及心得
遇到的问题:
1、对链表运用不熟悉,对链表中的头指针和头结点经常搞错,导致程序错误。
2、面对程序中所出现的错误,往往不知道如何修改,不知道如何通过调试手段对程序进行改进。
3、程序中所包含的步骤较多,不分步编写将造成较大麻烦。
心得:
写好一段有效的程序应该注重格式,分步书写,方便在后期的调试中找出错误。学会了单步调试,比如通过判断是否赋值成功等,比单独的思考更有帮助,有利于快速找出错误,学会了建立断点,可以节省时间。
另外虽然对C 语言的语法上有所掌握,学会使用链表,因为链表方便动态变化,比如插入一个数据很容易,而在一个数组中插入一个数组,要移动一堆数据,删除也是虽然很多问题是通过网络搜索解决,但是同时学会了更多程序其它头文件的调用,也发现了算法需要一步一步细想,锻炼了我们的逻辑思维能力。
最后就是此次课程设计,主张用划分功能模块的思想来整体编程,这样的方法有助于我们理清思绪,对此次的编程有很大帮助,避免了以往较长程序杂乱现象,做到主函数、功能实现模块、接口模块分开。而且主函数之前的函数声明,也让我们对整个程序的构成更有思考方向,避免了之后继续编程或修改的思路混乱。
五、附录(程序清单)
#include "stdio.h"
#include "conio.h" /*如用getchar()、getch()就要包含”conio.h ”*/ #include "malloc.h"
#include "string.h"
#include "stdlib.h"
#include "stdafx.h"
#include "iostream" /*如用system 是便需要包含”iostream ”*/
typedef struct book
{
char bookNumber[10]; /*登录号*/
char bookName[20]; /*书名*/
char bookconcernName[20]; /*出版社名*/
char writerName[20]; /*作者名*/
float mark1; /*价格*/
float mark2; /*出版时间(年. 月)*/
char kind; /*分类号(A 办公类 B 文学类 C 商务类 D 科学历史类)*/ struct book *next;
}book;
book *headLink; /*链表表头指针:告诉第一个元素的地址*/
void logo(char logos[10]) /*界面优化代码(清屏)*/
{
system("cls");
}
void ReadInfoFormFile(void); /*以下是函数声明*/
void DesplayMenu(void);
void CreateHeadLink(void);
book *MallocNode(void);
void GetInformation(book *t);
void OutputInformation(void);
void DesplayInfoBybookName(void);
void DesplayInfoBywriterName(void);
void DesplayOneNode(book *t);
void InsertOneNode(book *t);
void DeleteNodeBybookNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByMark1(void);
int choose; /*用于接受用户的选择*/
void main() /*主函数*/
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
void ReadInfoFormFile(void) /*函数功能:从文件中读书籍信息到链表中*/ {
FILE *fp; /*定义指向FILE 类型文件的指针变量*/ book *p;
fp=fopen("new.txt","rb");
if(!fp)
{
printf("文件不存在, 请创建文件后重新开启!!!\n");
system("pause"); /*从程序里调用“pause ”命令*/
return; /*直接返回,不带任何返回参数*/
}
p=MallocNode();
while(fread(&p,sizeof(book),1,fp)>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
void DesplayMenu(void) /*函数功能:显示菜单,根据用户的输入完成相应的功能*/ {
book *p;
logo("请选择相应功能");
printf("\n\n\n");
printf("******************************************************************************\n");
printf(" 图书信息管理系统\n\n");
printf(" 1 显示所有书籍的信息\n");
printf(" 2 按书籍名查询\n");
printf(" 3 按作者名查询\n");
printf(" 4 增加书籍\n");
printf(" 5 删除书籍\n");
printf(" 6 按书籍名修改书籍信息\n");
printf(" 7 按登录号修改书籍信息\n");
printf(" 8 按价格排序并输出信息\n");
printf(" 9 保存后退出\n");
printf("******************************************************************************\n\n\n");
printf("请选择操作:");
scanf("%d",&choose); /*取得用户的选择*/
switch(choose)
{
case 1: OutputInformation();
break;
case 2: DesplayInfoBybookName();
break;
case 3: DesplayInfoBywriterName();
break;
case 4: p=MallocNode();
GetInformation(p);
InsertOneNode(p);
break;
case 5: DeleteNodeBybookNumber();
break;
case 6: ChangeMarkByName();
break;
case 7: ChangeMarkByNumber();
break;
case 8: CompositorByMark1();
break;
case 9: SaveLinkToFile();
free(headLink);
exit(0);
break;
default: break;
}
DesplayMenu();
}
void CreateHeadLink(void)
{
book *p;
p=(book*)malloc(sizeof(book));
headLink=p;
p->next=NULL;
/*显示所有书籍的信息*/ /*根据用户输入的登录号显示该书籍的信息*/ /*先申请一个新结点*/ /*要求用户输入信息到新结点中*/ /*将新结点加到链表中*/ /*根据用户输入的登录号删除该书籍*/ /*根据用户输入的书籍名修改书籍*/ /*根据用户输入的登录号修改书籍*/ /*保存数据后再退出*/ /*释放申请区域*/ /*递归调用*/ /*函数功能:建立链表表头*/ /*指向下一个为空*/
}
book *MallocNode(void) /*函数功能:申请一个新结点,并将其初始化*/ {
book *p;
int i;
p=(book*)malloc(sizeof(book));
if(p==NULL)
return NULL;
for(i=0;i
p->bookNumber[i]='\0';
for(i=0;i
p->bookName[i]='\0';
for(i=0;i
p->writerName[i]='\0';
p->mark1=0;
p->kind=0;
p->mark2=0;
p->next=NULL;
return p;
}
void GetInformation(book *t) /*函数功能:取得用户输入的书籍信息*/ {
printf("请输入书籍登录号:\n");
scanf("%s",t->bookNumber);
printf("请输入书名:\n");
scanf("%s",t->bookName);
printf("请输入该书籍作者名;\n");
scanf("%s",t->writerName);
printf("请输入该出版社名:\n");
scanf("%s",t->bookconcernName);
printf("请输入价格:\n");
scanf("%f",&(t->mark1));
printf("请输入分类号(A 办公类 B 文学类 C 商务类 D 科学历史类):\n");
scanf("%s",&(t->kind));
printf("请输入出版时间(年. 月) :\n");
scanf("%f",&(t->mark2));
system("pause");
}
void InsertOneNode(book *t) /*函数功能:在链表的结尾处增加一个结点*/ {
book *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
void DesplayInfoBybookName(void) /*函数功能:根据用户输入的书名显示该书籍的信息*/ {
book *p;
char bookName[20];
char flag=0;
p=headLink->next; /*指向headLink 的下一个*/
printf("请输入书籍名:\n");
scanf("%s",&bookName);
while(p)
{
if(strcmp(p->bookName,bookName)==0)
{
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n");
DesplayOneNode(p);
system("pause");
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在书籍名为 %s 的书籍\n",bookName);
}
void DesplayInfoBywriterName(void) /*函数功能:根据用户输入的作者名显示该书籍信息*/ {
book *p;
char writerName[20];
char flag=0;
p = headLink->next;
printf("请输入作者名:\n");
scanf("%s",&writerName);
while(p)
{
if(strcmp(p->writerName,writerName)==0)
{
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n");
DesplayOneNode(p);
system("pause");
flag=1;
break;
}
p=p->next;
}
if(!flag) /*如果flag 依旧为零*/
printf("对不起,不存在登录号为 %s 的书籍\n",writerName);
}
void DesplayOneNode(book *t) /*函数功能:输出结点的信息 */ {
printf("%s\t",t->bookNumber);
printf("%s\t",t->bookName);
printf("%s\t\t",t->bookconcernName);
printf("%s\t",t->writerName);
printf("%2.1f\t",t->mark1);
printf("%c\t",t->kind);
printf("%4.2f\t",t->mark2);
}
void DeleteNodeBybookNumber(void) /*函数功能:根据用户输入的登录号删除该书籍*/ {
char bookNumber[10];
book *p,*q;
char flag=0;
printf("请输入要删除的书籍登录号:");
scanf("%s",&bookNumber);
p=headLink; /*找到链表的首地址*/
q=headLink->next; /*q指向headLink 的下一个*/
while(q) /*直到q 指向的登录号与用户输入的一样为止*/ {
if(strcmp(q->bookNumber,bookNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
system("pause");
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该登录号的书籍\n");
return;
}
printf("成功删除\n");
system("pause");
}
void OutputInformation(void) /*函数功能:显示所有书籍的信息*/
{
book *p;
p=headLink->next;
if(p==NULL)
{
printf(" 现在没有书籍信息,请先输入书籍信息\n\n"); system("pause");
return;
}
printf("登录号\t书籍名\t出版社名\t作者名\t价格\t分类号\t出版时间(年. 月)\n\n"); while(p)
{
DesplayOneNode(p);
p=p->next;
printf("\n");
}
system("pause");
}
void ChangeMarkByName(void) /*函数功能:根据输入的书籍名修改信息*/ {
book *p;
char bookName[20];
char flag=0;
float mark1;
char kind;
float mark2;
p=headLink->next;
printf("请输入书名:\n");
scanf("%s",&bookName);
while(p)
{
if(strcmp(p->bookName,bookName)==0)
{
printf("请输入新的价格:\n");
scanf("%f",&mark1);
printf("请输入新的分类号(A 办公类 B 文学类 C 商务类 D 科学历史类):\n");
scanf("%s",&kind);
printf("请输入新的出版时间(年. 月) :\n");
scanf("%f",&mark2);
p->mark1=mark1;
p->kind=kind;
p->mark2=mark2;
flag=1;
printf("修改成功\n");
system("pause");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在书籍名为 %s 的书籍\n",bookName);
}
void ChangeMarkByNumber(void) /*函数功能:根据输入的登录号修改信息 */ {
book *p;
char bookNumber[20];
char flag=0;
float mark1;
char kind;
float mark2;
p=headLink->next;
printf("请输入书籍登录号:\n");
scanf("%s",bookNumber);
while(p)
{
if(strcmp(p->bookNumber,bookNumber)==0)
{
printf("请输入新的价格:\n");
scanf("%f",&mark1);
printf("请输入新的分类号(A 办公类 B 文学类 C 商务类 D 科学历史类):\n");
scanf("%s",&kind);
printf("请输入新的出版时间(年. 月) :\n");
scanf("%f",&mark2);
p->mark1=mark1;
p->kind=kind;
p->mark2=mark2;
flag=1;
printf("修改成功\n");
system("pause");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在登录号为 %s 的书籍\n",bookNumber);
}
void SaveLinkToFile(void) /*函数功能:保存链表数据到文件中 */ {
book *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("注意:没有书籍信息!!!继续操作推出!\n\n");
system("pause");
return;
}
fp=fopen("new.txt","wb");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%8s",p->bookNumber);
fprintf(fp,"%8s",p->bookName);
fprintf(fp,"%8s",p->bookconcernName);
fprintf(fp,"%8s",p->writerName);
fprintf(fp,"%8.1f",p->mark1);
fprintf(fp,"%8c",p->kind);
fprintf(fp,"%8.2f",p->mark2);
fprintf(fp,"\n");
p=p->next;
} fclose(fp); printf("保存成功,按任意键安全退出"); }
void CompositorByMark1(void) /*函数功能:按价格排序*/ { book exchange,*r,*p,*q; r=headLink->next; if(r==NULL) { printf("现在还没书籍信息, 请先输入书籍信息\n"); return; } while(r)/*两层while 循环实现排序*/ { p=r; q=r->next; while(q) { if((q->mark1)>(p->mark1)) { strcpy(exchange.bookNumber,q->bookNumber);/*先复制q 结点信息到 exchange*/ strcpy(exchange.bookName,q->bookName); strcpy(exchange.writerName,q->writerName); exchange.mark1=q->mark1; exchange.kind=q->kind; exchange.mark2=q->mark2; strcpy(q->bookNumber,p->bookNumber); /*再复制p 结点信息到q*/ strcpy(q->bookName,p->bookName); strcpy(q->writerName,p->writerName); q->mark1=p->mark1; q->kind=p->kind; q->mark2=p->mark2; strcpy(p->bookNumber,exchange.bookNumber); /*最后复制exchange 结点信息到p*/ strcpy(p->bookName,exchange.bookName); strcpy(p->writerName,exchange.writerName); p->mark1=exchange.mark1; p->kind=exchange.kind; p->mark2=exchange.mark2; } q=q->next;
}
} r=r->next; }
OutputInformation();
六、评分
总成绩: 等级: