宋岱瑾 2 years ago
parent fe0a344606
commit d9551a09a5

200
app.c

@ -1,161 +1,59 @@
#include <stdio.h>
#include <stdlib.h>
#include "data.h"
#include <string.h>
//图书存储结构
struct book{
int id;
char name;
char author;
float price;
struct book *next;
int id;//图书编号
char name[20];//图书名称
char author[20];//图书作者
float price;//图书价格
struct book *next; // 指向下一图书
}*books;
///////////////////
// 用户界面模块 //
// 系统初始化,读取数据文件到内存
void init();
// 显示主菜单
void display_menu();
// 选择菜单命令,调用相应的功能函数
void make_choice();
// 确认操作
void confirm();
// 退出系统,释放内存,保存数据到文件
void quit();
///////////////////
// 数据处理模块 //
// 从文件读取数据到内存
void read_data();
// 保存内存数据到文件
void save_data();
// 打印图书信息
void print_data();
// 根据图书编号查询图书信息
book *find(int id);
// 查询图书信息
void query_data();
// 添加新图书信息
void add_data();
// 更新图书信息
void update_data();
// 删除图书信息
void delete_data();
// 对图书信息进行排序
void sort_data();
// 生成图表报表
void make_chart();
// 菜单命令的编号
enum {
CMD_QUIT, // 退出
CMD_READ, // 读取
CMD_SAVE, // 保存
CMD_PRINT, // 打印
CMD_QUERY, // 查询
CMD_INSERT, // 添加
CMD_UPDATE, // 修改
CMD_DELETE, // 删除
CMD_SORT, // 排序
CMD_CHART, // 图表
};
//函数声明
void init(void);
void quit(void);
void display_menu(void);
int make_choice(void);
int confirm(const char* msg);
// 主程序
int main(void)
{
init(); // 程序启动
while (1){
display_menu();
make_choice();
}
quit(); // 程序退出
return 0;
}
void init(void)
{
puts("程序启动");
}
void quit(void)
{
puts("程序退出");
exit(EXIT_SUCCESS);
}
void display_menu(void)
{
printf("\n%d 读取 | %d 保存 | %d 打印 | %d 查询 | %d 添加\n%d 修改 | %d 删除 | %d 排序 | %d 图表 | %d 退出\n\n",
CMD_READ,
CMD_SAVE,
CMD_PRINT,
CMD_QUERY,
CMD_INSERT,
CMD_UPDATE,
CMD_DELETE,
CMD_SORT,
CMD_CHART,
CMD_QUIT);
}
int make_choice(void)
{
int c;
int n = 0;
while (n == 0) {
printf("请选择:");
n = scanf("%d", &c);
scanf("%*[^\n]");
switch(c)
{
case CMD_QUIT:
if (confirm("确定要退出吗?")) quit(); // 仅在确认后退出
break;
case CMD_READ: read_data(); break;
case CMD_SAVE: save_data(); break;
case CMD_PRINT: print_data(); break;
case CMD_QUERY: query_data(); break;
case CMD_INSERT: add_data(); break;
case CMD_UPDATE: update_data(); break;
case CMD_DELETE: delete_data(); break;
case CMD_SORT: sort_data(); break;
case CMD_CHART: make_chart(); break;
default: break;
}
}
return c;
}
// 添加新图书信息
void add_data()
{
struct book *p, *q;
p = (struct book*)malloc(sizeof(struct book));
printf("请依次输入图书信息:\n");
printf("图书编号:");
scanf("%d", &p->id);
printf("图书名称:");
scanf("%s", p->name);
printf("图书作者:");
scanf("%s", p->author);
printf("图书价格:");
scanf("%f", &p->price);
q = books;
while(q != NULL && p->id > q->id)
q = q->next;
p->next = q; // 指向下一个节点
books = p; // 新节点成为链表头
printf("图书信息添加成功!\n");
}
// 更新图书信息
void update_data()
int main()
{
int id;
struct book *p;
printf("请输入要修改的图书编号:");
scanf("%d", &id);
p = find(id); // 查找编号为id的图书
if(p != NULL)
{
printf("请依次输入修改后的图书信息:\n");
printf("图书名称:");
scanf("%s", p->name);
printf("图书作者:");
scanf("%s", p->author);
printf("图书价格:");
scanf("%f", &p->price);
printf("图书信息修改成功!\n");
}
else
{
printf("没有找到编号为%d的图书!\n", id);
}
display_menu();
make_choice();
return 0;
}
Loading…
Cancel
Save