各位,有可以把C++修改成纯C的朋友麻烦帮下忙,感谢
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <time.h>
# define LEN sizeof(struct Book)
struct Book {
char num[100]; //编号
char name[200]; //图书名
char writer[200]; //作者名
char booki2[200]; //出版日期
char booki3[200]; //出版社
char booki4[200]; // 图书类别
char booki5[100]; //价格
char booki6[100] ; //ISBN
struct Book *next;
};
int menu();
void start();
void welcome();
char filename[30];//全局变量,用来保存要打开的文件名字
struct Book *Creat(int n);
//生成链表
struct Book *Creat(int n)
{
void menu_print_in(void);
struct Book *head;
struct Book *p1, *p2;
system("cls");
int i;
for(i=1;i<n+1;i++)
{
p1 = (struct Book*)malloc(LEN);
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p1->num,p1->name,p1->writer, &p1->booki2,p1->booki3,p1->booki4,p1->booki5,p1->booki6);
p1->next = NULL;
if(i==1)
{
head = p2 = p1;
}
else
{
p2->next = p1;
p2 = p1;
}
}
return(head);
}
//数据存盘(wb只写)
void WriteData_wb(struct Book *head)
{ FILE *fp;
struct Book *p;
if((fp = fopen(filename, "wb"))==NULL)
printf("\a 文件打开错误");
p = head;
while(p!=NULL)
{
if(fwrite(p,LEN,1,fp)!=1)
{
printf("写入数据出错\n");
fclose(fp);
return;
}
p=p->next;
}
fclose(fp);
}
//数据存盘(ab追加)
void WriteData_ab(struct Book *head)
{
FILE *fp;
struct Book *p;
if((fp = fopen(filename, "ab"))==NULL)
printf("\a 文件打开错误!");
p = head;
while(p!=NULL)
{
if(fwrite(p,LEN,1,fp)!=1)
{
printf("写入数据出错\n");
fclose(fp);
return;
}
p=p->next;
}
fclose(fp);
}
//读取数据文件保存到链表中 ,返回指向此链表头指针
struct Book *ReadData(void)
{
struct Book *head = NULL;
struct Book *p1, *p2;//s = p1;p = p2;
FILE *fp;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("打开文件出错\n");
exit(0);
}
while(!feof(fp))
{
if((p1=(struct Book*)malloc(LEN))==NULL)
{
printf("内存申请出错\n");
fclose(fp);
exit(0);
}
if(fread(p1,LEN,1,fp)!=1)
{
free(p1);
break;
}
if(head==NULL)
head=p2=p1;
else
{
p2->next=p1;
p2=p1;
}
}
fclose(fp);
return (head);
}
//全部查询
void display()
{
system("cls");
void menu_print_out(void);
struct Book *p;
p = ReadData();
menu_print_out();
do
{
printf("%-10s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->writer,p->booki2,p->booki3,p->booki4,p->booki5,p->booki6);
p = p->next;
printf("\n\n");
}
while(p!=NULL);
printf("\n\n");
}
//图书编号查询
int query_num()
{
system("cls");
void menu_print_out();
struct Book *p;
char str_num[10];
printf("请输入您要查询的图书编号:");
scanf("%s", str_num);
p = ReadData();
menu_print_out();
do
{
if(strcmp(p->num,str_num)==0)
{
printf("%-10s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->writer,p->booki2,p->booki3,p->booki4,p->booki5,p->booki6);
printf("\n\n");
return 0;
}
p = p->next;
}
while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//图书名称查询
int query_name()
{
system("cls");
void menu_print_out(void);
struct Book *p;
char str_name[20];
printf("请输入您要查询的图书名称:");
scanf("%s", str_name);
p = ReadData();
menu_print_out();
do
{
if(strcmp(p->name,str_name)==0)
{
printf("%-8s%6s%8s%4d%13s%11s %4s %4s",p->num,p->name,p->writer,p->booki2,p->booki3,p->booki4,p->booki5,p->booki6);
printf("\n\n");
return 0;
}
p = p->next;
}
while(p!=NULL);
printf("数据库中没有存储您要查询的数据!\n");
printf("\n\n");
return 0;
}
//【1】修改数据之删除记录
int delBook()
{
struct Book *p1, *p2, *head;
char str_num[20];
printf("\n请输入您要删除的图书信息:");
scanf("%s", str_num);
p1 = ReadData();
p2 = p1->next;
head = p1;
while(p2!=NULL)
{
if(strcmp(p1->num,str_num)==0) {
WriteData_wb(p2);
}
else if(strcmp(p2->num,str_num)==0) {
p1->next = p2->next;
WriteData_wb(head);
}
p2 = p2->next;
p1 = p1->next;
}
if(p2!=NULL)
printf("数据库中没有存储您要删除的数据!\n");
printf("\n\n");
return 0;
}
//【2】修改数据之修改记录
int change1()
{
void menu_print_in(void);
struct Book *p1, *p2, *head;
char str_num[20];
printf("请输入您要修改的图书信息:");
scanf("%s", str_num);
p1 = ReadData();
p2 = p1->next;
head = p1;
while(p2!=NULL)
{
if(strcmp(p1->num,str_num)==0) {
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p1->num,p1->name,p1->writer, &p1->booki2,p1->booki3,p1->booki4,p1->booki5,p1->booki6);
WriteData_wb(head);
}
else if(strcmp(p2->num,str_num)==0)
{
menu_print_in();
scanf("%s%s%s%d%s%s%s%s",p2->num,p2->name,p2->writer,&p2->booki2,p2->booki3,p2->booki4,p2->booki5,p2->booki6);
WriteData_wb(head);
}
p2 = p2->next;
p1 = p1->next;
}
if(p2!=NULL)
printf("数据库中没有存储您要删除的数据!\n");
return 0;
}
void start() //欢迎界面
{
system("color 3");
printf("\n\n\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★ 欢迎使用呼伦贝尔学院图书信息管理系统 ★\n");
printf("\t\t\t★ ★\n");
printf("\t\t\t★★★★★★★★★★★★★★★★★★★★★\n");
printf("\n\t\t\t\t系统开始启动.........\n");
printf("===============================================================================\r");
int i;
for(i=1;i<80;i++)
{
Sleep(40);
printf(">");
}
system("CLS");
welcome();
}
void welcome()//登录界面
{
system("CLS");
system("color B");
printf("\n\n\n\n\n\n\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("\t\t\t⊙ \n");
printf("\t\t\t★ 欢迎使用图书信息管理系统 ★\n");
printf("\t\t\t⊙ \n");
printf("\t\t\t★ 日期:2022.6.17 ★\n");
printf("\t\t\t⊙ \n");
printf("\t\t\t⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙\n");
printf("\n\t\t\t按任意键继续...");
getchar();
system("CLS");
menu();
}
//主菜单
int menu()
{
void addBook();
void query();
int File_name();
void change();
system("CLS");
system("color E");
printf("\t\t\t★★★★★★主菜单★★★★★★\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.录入图书信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.查询图书信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.修改图书信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 4. 退出系统 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t请输入功能前的序号选择服务项目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3'&&a!='4') {
printf("错误,请输入正确的号码!\n");
putchar('\a');
getchar();
printf("\n\t\t请输入功能前的序号选择服务项目:");
a = getchar();
}
switch(a) {
case '1': File_name();addBook();
break;
case '2': File_name();query();
break;
case '3': File_name();change();
break;
case '4': exit(0);
break;
}
getchar();
}
int File_name()
{
printf("\n\t\t请输入您要打开的文件(文件夹名):");
if(scanf("%s", filename)!=1)
printf("\a error!");
return 0;
}
//二级菜单之添加数据
void addBook()
{
int Creat_num();
system("cls");
getchar();
system("CLS");
system("color E");
printf("\t\t\t★★★★★★添加图书数据信息※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1. 新建文件 ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※ 2. 增添数据 ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※ 3. 返回菜单 ※\n");
printf("\t\t\t※----------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※\n");
printf("\n\t\t请输入功能前的序号选择服务项目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3')
{
printf("错误,请输入正确的号码!\n");
putchar('\a');
getchar();
printf("\n\t\t请输入功能前的序号选择服务项目:");
a = getchar();
}
switch(a) {
case '1': WriteData_wb(Creat(Creat_num()));
printf("\n新建文件成功且数据已成功保存\n");
system("pause");
system("cls");
addBook();
break;
case '2': WriteData_ab(Creat(Creat_num()));
printf("\n图书信息已成功添加\n");
system("pause");
system("cls");
addBook();
break;
case '3': system("cls");
getchar();
menu();
break;
}
}
//二级菜单之查询数据
void query()
{
system("cls");
getchar();
while(1)
{
system("CLS");
system("color F");
printf("\t\t\t★★★★★查询图书信息※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.全部查询 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.编号查询 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.书名查询 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 4.返回菜单 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t请输入功能前的序号选择服务项目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3'&&a!='4')
{
printf("错误,请输入正确的号码!\n");
putchar('\a');
getchar();
printf("\n\t\t请输入功能前的序号选择服务项目:");
a = getchar();
}
switch(a) {
case '1': display();system("pause");getchar();
break;
case '2': query_num();system("pause");getchar();
break;
case '3': query_name();system("pause");getchar();
break;
case '4': system("cls");getchar();menu();
break;
}
}
}
int Creat_num() {
printf("\n\t\t请输入您要添加的图书信息个数:");
int n;
if(scanf("%d", &n)!=1) {
printf("\a error!");
}
return n;
}
//二级菜单之修改数据/
void change()
{
system("cls");
getchar();
while(1)
{
system("CLS");
system("color B");
printf("\t\t\t★★★★★★修改图书信息※※※※※\n");
printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※※※\n");
printf("\t\t\t※ ※\n");
printf("\t\t\t※ 1.删除图书信息 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 2.修改信息记录 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※ 3.返回菜单 ※\n");
printf("\t\t\t※------------------------※\n");
printf("\t\t\t※※※※※※※※※※※※※※\n");
printf("\n\t\t请输入功能前的序号选择服务项目:");
int a = 0;
a = getchar();
while(a!='1'&&a!='2'&&a!='3')
{
printf("错误,请输入正确的号码!\n");
putchar('\a');
getchar();
printf("\n\t\t请输入功能前的序号选择服务项目:");
a = getchar();
}
switch(a) {
case '1': delBook();
printf("\n\n已成功删除指定图书信息\n");
system("pause");
getchar();
break;
case '2': change1();
printf("\n\n已成功修改指定图书信息\n");
system("pause");
getchar();
break;
case '3': system("cls");
getchar();
menu();
break;
}
}
}
//输入输出提示栏
void menu_print_in() {
printf("----------------------------------------------------------------------------------------------------------\n");
printf(" 图书编号 | 图书名称 | 作者名 | 出版日期 | 出版社 | 图书类别 | 价格 | I S B N |\n");
printf("----------------------------------------------------------------------------------------------------------\n");
}
void menu_print_out(void) {
printf("--------------------------------------------------------------------------------------------------------\n");
printf(" 图书编号 | 图书名称 | 作者名 | 出版日期 | 出版社 | 图书类别 | 价格 | I S B N |\n");
printf("---------------------------------------------------------------------------------------------------------\n");
}
//主函数
int main()
{
start();
return 0;
}