宋岱瑾 2 years ago
parent fe0a344606
commit d9551a09a5

198
app.c

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