#define _CRT_SECURE_NO_WARNINGS #include#include #include #include #include #define LEN sizeof(book) typedef struct book //确认结构体 { char id[8]; char name[31]; char author[27]; char publish[31]; double price; }book; void Menu1();//标题函数 void Menu2();//菜单函数 void WriteToFile();//书籍信息输入的函数 void ReadFromFile();//显示所有信息的函数 void QueryFile();//书籍的查询函数 void ModifyFile();//书籍的修改函数 void DeletFile();//删除数据的函数 int chengxv1() //chengxv1 { int select; do { Menu1(); Menu2(); scanf("%d", &select); switch (select) { case 1: WriteToFile(); break; case 2: ReadFromFile(); break; case 3: QueryFile(); break; case 4: ModifyFile(); break; case 5: DeletFile(); break; default: printf("退出程序!"); exit(0); break; } }while ((select == 1 || select == 2)||(select == 3|| select == 4)||( select == 5)); return 0; }//利用switch函数进行菜单的选择 void Menu1() { printf("**********欢迎使用西京大学图书管理系统***********n"); }//标题函数1 void Menu2() { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("tt1.录入图书ttn"); printf("tt2.显示图书ttn"); printf("tt3.查询图书ttn"); printf("tt4.修改图书ttn"); printf("tt5.删除图书ttn"); printf("tt0.退出ttn"); printf("tt输入你的操作:"); }//标题函数2 void WriteToFile() { FILE *fp = NULL; book stu; char flag = 'y'; fp = fopen("book1.dat", "ab+");//打开文件 if (fp == NULL) { printf("文件打开失败!n"); exit(1);//1表示在有错的方式退出程序 } while ((flag == 'y' || flag == 'Y')) { system("cls"); Menu1(); printf("请输入图书id:"); scanf("%s", stu.id); printf("请输入书名:"); scanf("%s", stu.name); printf("请输入书籍作者:"); scanf("%s", &stu.author); printf("请输入出版社:"); scanf("%s", &stu.publish); printf("请输入价格:"); scanf("%lf", &stu.price); fwrite(&stu, LEN, 1, fp); fflush(stdin); printf("继续输入吗?继续请输入y或Y:"); getchar(); scanf("%c", &flag); } fclose(fp);//关闭文件 return; }//图书添加的函数 void ReadFromFile() { system("cls"); Menu1(); FILE *fp = NULL; book stu; fp = fopen("book1.dat", "rb"); if (fp == NULL) { printf("文件打开失败"); exit(1); } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf(" idtt书名tt作者n"); fseek(fp, 0, SEEK_SET); while (!feof(fp)) { if (fread(&stu, LEN, 1, fp)) { printf("%10st%8stt%5sn", stu.id, stu.name, stu.author); } } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); system("pause"); system("cls"); fclose(fp); return; } void QueryFile() { system("cls"); Menu1(); book stu; char x[8]; int flag = 0; FILE *fp; printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("tt请输入图书id:"); scanf("%s", x); printf(" ID 书名 作者 出版社 价格n"); fp = fopen("book1.dat", "rb"); if (fp == NULL) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("错误n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); return; } fseek(fp, 0, SEEK_SET); while (fread(&stu, LEN, 1, fp)) { if (strcmp(x, stu.id) == 0) { printf("%3s %5s %5s %10s %5.2lfn", stu.id, stu.name, stu.author, stu.publish, stu.price); flag = 1; } if (flag = 0) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("没有图书信息"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); } } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); fclose(fp); system("pause"); system("cls"); return; } void ModifyFile() { system("cls"); Menu1(); book stu; FILE *fp; char x[8]; printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("请输入图书id:"); scanf("%s", x); fp = fopen("book1.dat", "rb+"); if (fp == NULL) { printf("文件打开失败"); exit(1); } fseek(fp, 0, SEEK_SET); while (fread(&stu, LEN, 1, fp)) { if (strcmp(x, stu.id) == 0) { printf("请重新输入图书id: "); scanf("%s", stu.id); printf("请重新输入书名: "); scanf("%s", stu.name); printf("请重新输入书籍作者 : "); scanf("%s", &stu.author); printf("请重新输入图书出版社 : "); scanf("%s", &stu.publish); printf("请重新输入图书价格 : "); scanf("%lf", &stu.price); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); fflush(stdin); fseek(fp, 0-LEN, SEEK_CUR); fwrite(&stu, LEN, 1, fp); fclose(fp); } if (feof(fp)) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); printf("没有图书信息"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n"); } } system("pause"); system("cls"); return; } void DeletFile() { system("cls"); Menu1(); book s; FILE* fp; char a[10]; fp = fopen("book1.dat", "rb+"); if (fp == NULL) { printf("打开文件错误!!!n"); exit(1); } printf("n请输入图书ID:"); scanf("%s", a); printf("nttt删除成功n"); fseek(fp, 0, SEEK_SET); FILE* fp1; fp1 = fopen("linshi.dat", "ab+");//读写新建一个临时文件 while (fread(&s, LEN, 1, fp))//从原文件读一个结点 { if (strcmp(a, s.id) != 0)//不是要删除的内容 { fwrite(&s, LEN, 1, fp1); } } fclose(fp); fclose(fp1); remove("book1.dat");//删除原文件 rename("linshi.dat", "book1.dat");//重命名为原文件 fflush(stdin); system("pause"); system("cls"); return; } #define _CRT_SECURE_NO_WARNINGS #define MAX_PERSON 1000 typedef struct Person { char name[1024]; char tel[1024]; } Person; typedef struct AddressBook { Person persons[MAX_PERSON]; int size; } AddressBook; void init(AddressBook* addressbook) { addressbook->size = 0; } void addPerson(AddressBook* addressbook) { printf("新增借书学生n"); int cursize = addressbook->size; if (cursize >= MAX_PERSON) { printf("名单已满,增加失败!n"); } Person* p = &addressbook->persons[cursize]; printf("请输入学生姓名:"); scanf("%s", p->name); printf("请输入学生电话:"); scanf("%s", p->tel); printf("新增借书学生成功!n"); addressbook->size++; } void findPerson(AddressBook* addressbook) { printf("按照姓名查找借书学生n"); printf("请输入要查找的姓名: "); char name[1024] = { 0 }; scanf("%s", name); for (int i = 0; i < addressbook->size; i++) { Person* p = &addressbook->persons[i]; if (strcmp(name, p->name) == 0) { printf("[%d]tt%stt%sn", i, p->name, p->tel); } } printf("查找完成!n"); } void delPerson(AddressBook* addressbook) { printf("删除借书学生n"); printf("请输入要删除的借书学生的编号: "); int id = 0;scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("您输入的编号有误!n"); return; } if (id == addressbook->size - 1) { addressbook->size--;printf("删除成功!n"); return; } addressbook->persons[id] = addressbook->persons[addressbook->size - 1]; addressbook->size--;printf("删除成功!n"); } void updatePerson(AddressBook* addressbook) { printf("更新联系人n");printf("请输入要更新的联系人的编号: "); int id = 0; scanf("%d", &id); if (id < 0 || id >= addressbook->size) { printf("您输入的编号有误!n"); return; } Person* p = &addressbook->persons[id]; printf("请输入学生姓名:"); scanf("%s", p->name); printf("请输入学生电话:"); scanf("%s", p->tel); printf("更新借书学生成功!n"); } void printPerson(AddressBook* addressbook) { printf("查所有借书学生:n"); for (int i = 0; i < addressbook->size;i++) { Person* p = &addressbook->persons[i]; printf("[%d]tt%stt%sn", i, p->name, p->tel); } printf("共计 [%d] 条记录n", addressbook->size); } void clearPerson(AddressBook* addressbook) { for (int i = 0; i < addressbook->size; i++) { addressbook->size--; if (addressbook->size == 0) { break; } }printf("清空成功n");} void sortPerson(AddressBook* addressbook) { if (addressbook->size <= 0) { printf("名单没有联系人,请添加!n"); } int i = 0; int j = 0; for (i = 0; i < addressbook->size - 1; i++) { for (j = 0; j < addressbook->size - i - 1; j++) { if (strcmp(addressbook->persons[j].name, (addressbook->persons[j + 1]).name) > 0) { Person tmp = addressbook->persons[j]; addressbook->persons[j] = addressbook->persons[j + 1]; addressbook->persons[j + 1] = tmp; } }printf("排序成功!n"); } } int menu() { printf("=====================n"); printf(" 1. 新增借书学生n"); printf(" 2. 查找借书学生n"); printf(" 3. 删除借书学生n"); printf(" 4. 修改借书学生n"); printf(" 5. 查看所有借书学生n"); printf(" 6. 清空所有借书学生n"); printf(" 7. 以名字排序所有借书学生n"); printf(" 0. 退出n"); printf("=====================n"); printf(" 请输入您的选择:"); int choice = 0;scanf("%d", &choice); return choice; } typedef void(*Func)(AddressBook*); AddressBook addressbook; int chengxv2() //chengxv2 { Func funcs[] = { NULL, addPerson, findPerson, delPerson, updatePerson, printPerson, clearPerson, sortPerson, }; init(&addressbook); while (1) { int choice = menu(); if (choice == 0) { printf("GoodBye!!!"); break; } if (choice < 0 || choice>sizeof(funcs) / sizeof(funcs[0])) { printf("您的输入无效!n"); continue; } funcs[choice](&addressbook); } system("pause"); return 0; } void main() //main { int a; char ch; do{ printf("nnnntt****&****&****&****&****&****&****&****&****&****"); printf("nnnntt欢迎使用本系统!!!"); printf("nnnntt******************************按任意键继续....."); ch=getchar(); }while(!ch); printf("请选择程序序号n"); printf("1.图书管理系统n"); printf("2.借书学生统计系统n"); scanf("%d",&a); switch(a) { case 1: chengxv1(); break; case 2: chengxv2(); break; default: printf("输入错误!!!n"); break; } }



