skull1234 2017-06-13 14:26 采纳率: 0%
浏览 726

求大神,写的程序有错误,新手找不出来,求指点

图书信息管理系统(学号尾数为4和9的同学完成)
(1)设计要求
设计并实现一个图书信息管理系统。图书信息包括编号、书名、作者名、图书分类号、出版单位、出版时间、单价等。
(2)系统功能
 系统以菜单的方式工作:要求界面清晰、美观、友好、易用。
 图书信息导入功能:可以从文件导入图书信息。
 浏览:能够显示所有图书信息,显示格式清晰、美观。
 查询:能够根据图书分类号查询,并输出查询结果。
 图书信息添加:可以添加新的图书信息,并实现信息存盘。
 图书信息修改:输入图书编号,对相应的图书进行修改,并在修改后实现信息存盘。
 图书信息删除:输入图书编号,对相应的图书进行删除,并在删除后实现信息存盘。
#include /*引用库函数*/
#include

include

include

include

include

typedef struct book_info//定义图书信息的结构体变量并声明新的类型名
{
char AN[10]; /*登录号*/
char name[20]; /*书名*/
char author[20]; /*作者名*/
char clc[10]; /*分类名*/
char company[20]; /*出版单位*/
char date[20]; /*出版日期*/
char price[10]; /*价格*/
struct book_info *next;
}Booklist,*Pointer;

int num=0;//全局变量的定义
Pointer Head=NULL;//头指针为空
FILE *fp;//指向文件的指针

              /*声明函数*/

int menu_select();/*主菜单函数*/
void Insert(Pointer * Head);/*录入函数*/
void Scan(Pointer Head);/*显示函数*/
void Search_name(Pointer Head);/*按书名查找函数*/
void Search_author(Pointer Head);/*按作者名查找函数*/
void Delete(Pointer * Head);//删除函数
void Update(Pointer Head);//修改函数
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:Delete(&Head);
break;
case 6:Update(Head);
break;
case 0:Exit();
default:
putchar('\a');
}
}
}

menu_select()//主菜单函数
{
int a;
printf("\n\t\t\t欢迎使用图书信息管理系统\n\n\n\n\n\t\t ***** 请按任意键进入系统菜单! ***** \n");
getch();
system("cls");
printf("\t\t********************MENU*********************\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 7. 修改图书信息\n");
printf("\t\t 0. 退出\n");
printf("\t\t***********************************************\n");
do
{
printf("\n\t请选择您所需要的功能:");
scanf("%d",&a);
}
while (a6);
return a;
}

void Insert(Pointer * Head) //录入图书信息函数
{
char AN[10] ;
char c;
Pointer p,q,r;
printf("\n\t\t**************** 请输入图书信息 ****************\n");/*交互输入*/
printf("\n\t\t请输入登录号:");
scanf("%s",AN);
p=q= * Head;//检测登录号是否重复
while(p!=NULL)
{
if(strcmp(p->AN,AN)==0)
{
printf ("已经有相同的登录号:");return;}
else
{q=p;p=p->next;}
}
r=(Pointer)malloc(sizeof(Booklist));
r->next=NULL;
if(r==NULL)
{printf("分配空间失败!");return;}
if(q==NULL)

  • Head=r; else {q->next=r;} strcpy(r->AN,AN); printf("\n\t\t输入书名:"); //录入图书信息 scanf("%s",r->name); getchar(); printf("\n\t\t输入作者名:"); scanf("%s",r->author); getchar(); printf("\n\t\t输入分类号:"); scanf("%s",r->clc) ; getchar(); printf("\n\t\t输入出版单位:"); scanf("%s",r->company) ; getchar(); printf("\n\t\t输入出版日期:"); gets(r->date) ; printf("\n\t\t输入价格:"); scanf("%s",r->price); do { printf("\n\t\t录入成功!!!!"); num++; printf("选择是否继续录入(Y/N)?:"); /*连续录入图书信息*/ getchar(); scanf("%c",&c); if(c=='y'||c=='Y') Insert(Head); else { if(c=='n'||c=='N') return; else printf("\n\t\t输入错误,请重新输入!!!"); } } while(c!='y'&&c!='n'&&c!='Y'&&c!='N'); }

void Scan(Pointer Head) //显示图书信息函数
{
Pointer p;
p=Head;
if(p==NULL)
printf("记录为空");//检测是否有图书信息
else
{
printf("\n\t共有%d条记录",num);
while(p!=NULL)
{
printf("\n\n\t\t登录号:%-10s",p->AN);//显示图书信息
printf("\n\t\t书名: %-20s",p->name);
printf("\n\t\t作者名: %-20s",p->author);
printf("\n\t\t分类号: %-10s",p->clc);
printf("\n\t\t出版单位:%-20s",p->company);
printf("\n\t\t出版时间:%-20s",p->date);
printf("\n\t\t价格: ¥%-10s",p->price);
p=p->next;
}
printf("\n\t\t请按任意键回到主菜单");
return;
}
}

void Search_name(Pointer Head) //按书名查找函数
{
int flag=0;//标记变量的初值
char name[10];
Pointer p;
printf ("\n请输入需要查询的书名:");
scanf("%s",name);
printf("\n\t\t************* 以下是您查找的信息 ***************");
p=Head;
while(p!=NULL)
{

if(strcmp(p->name,name)==0)//查找符合的图书
{

printf("\n\t登录号: %-10s",p->AN);
printf("\n\t书名: %-20s",p->name);
printf("\n\t作者名: %-20s",p->author);
printf("\n\t分类号: %-10s",p->clc);
printf("\n\t出版单位:%-20s",p->company);
printf("\n\t出版时间:%-20s",p->date);
printf("\n\t价格: ¥%-10s",p->price);
flag=1;//找到标记变量设为1
p=p->next;//指针走到下一个节点
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同书名纪录");
printf("\n\t\t请按任意键返回主菜单");
getchar();
}

void Search_author(Pointer Head) //按作者名查找函数
{
int flag=0;
char author[10];
Pointer p;
printf ("\n请输入需要查询的作者名:");
scanf("%s",author);
printf("\n\t\t************* 以下是您查找的信息 ***************");
p=Head;
while(p!=NULL)//查找符合的图书
{

if(strcmp(p->author,author)==0)/*找到图书显示信息*/
{

printf("\n\t登录号: %-10s",p->AN);
printf("\n\t书名: %-20s",p->name);
printf("\n\t作者名: %-20s",p->author);
printf("\n\t分类号: %-10s",p->clc);
printf("\n\t出版单位:%-20s",p->company);
printf("\n\t出版时间:%-20s",p->date);
printf("\n\t价格: ¥%-10s",p->price);
flag=1;
p=p->next;
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同作者名纪录");
printf("\n\t\t请按任意键返回主菜单");
getch();
}

void Delete(Pointer Head)/删除函数*/
{int flag=1;
char AN[10];
char c,z;
Pointer p,q;
printf("\n\t\t******************* 图书删除 *******************\n");
printf("\t请输入要删除图书的信息的登录号:");
scanf("%s",AN);
p=q=*Head;/*查找符合条件的图书*/
while(p!=NULL&&flag)
{
if(strcmp(p->AN,AN)==0)/*找到该图书*/
{
printf("\t\n登录号:%-10s",p->AN);//显示即将要删除的图书的信息
printf("\t\n书名:%-20s",p->name);
printf("\t\n作者名:%-20s",p->author);
printf("\t\n分类号:%-10s",p->clc);
printf("\t\n出版单位:%-20s",p->company);
printf("\t\n出版时间:%-20s",p->date);
printf("\t\n价格:¥%-10s\n",p->price);
printf("确定删除?确定请输Y,其它则不删除");//询问是否删除
getchar();
scanf("%c",&z);
if(z=='Y'||z=='y')
{ if(p==*Head)
{*Head=p->next;free(p);}/*删除图书信息*/
else
{q->next=p->next;free(p);}
flag=0;
}
else
{printf("图书信息未删除,返回主菜单。");
return;
}
}
else
{q=p;p=p->next;}/*指针走到下一个节点*/
printf("\t\t删除成功!!!\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;/*不删除返回主菜单*/
else
printf("\n\t\t输入错误,请重新输入!!!");
}
}
while(c!='y'&&c!='n'&&c!='Y'&&c!='N');
}

void Update(Pointer Head)/*图书信息修改函数*/
{
int flag=1;
char AN[10];
char c;
Pointer p;
printf("\n\t\t***************** 图书信息修改 *****************\n");
printf("\t请输入要修改的图书的登录号:");
scanf("%s",AN);/*查找符合条件的图书*/
p=Head;
while(p!=NULL&&flag)
{
if(strcmp(p->AN,AN)==0)
{

printf("\n\t\t请输入登录号:");/*修改图书信息*/
scanf("%s",p->AN);
printf("\n\t\t输入书名:");
scanf("%s",p->name);
getchar();
printf("\n\t\t输入作者名:");
scanf("%s",p->author);
getchar();
printf("\n\t\t输入分类号:");
scanf("%s",p->clc) ;
getchar();
printf("\n\t\t输入出版单位:");
scanf("%s",p->company) ;
getchar();
printf("\n\t\t输入出版日期:");
gets(p->date);
printf("\n\t\t输入价格:");
scanf("%s",p->price);
flag=0;
printf("修改成功!!\n");
}
else
p=p->next;/*指针走到下一个节点*/
}
if(flag)
printf("\n\t\t没有该图书记录!!!");
do
{
printf("选择是否继续修改(Y/N)?:"); /*连续修改图书信息*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Update(Head);/*继续修改*/
else
{if(c=='n'||c=='N')
return;//不修改,返回菜单
else
printf("\n\t\t输入错误,请重新输入!!!");
}
}
while(c!='y'&&c!='n'&&c!='Y'&&c!='N');//输入错误则继续询问
}

void Exit()/*退出程序的函数*/
{char c;

do
{printf("\n\t\t退出中......是否保存到文件(Y/N)?"); /*询问是否保存图书信息,防止丢失*/
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
{Save();
exit(0);
}
else
{if(c=='n'||c=='N')
{exit(0);
}
else
printf("\n\t\t输入错误,请重新输入!!!");
}
}
while(c!='y'&&c!='n'&&c!='Y'&&c!='N');//错误则继续询问
}

  • 写回答

4条回答 默认 最新

  • devmiao 2017-06-13 15:53
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的