diff --git a/code/commodity1.txt b/code/commodity1.txt deleted file mode 100644 index 8c3e0c272d4af3a56a2ddb3e1f682b6932186ceb..0000000000000000000000000000000000000000 --- a/code/commodity1.txt +++ /dev/null @@ -1,12 +0,0 @@ -001 apple 2020 7 14 wangyi qiang 100 5 6 2020 6 20 365 westroom -002 orange 2020 6 14 tengxun qiang 80 4 5 2020 6 10 35 westroom -003 banana 2020 7 5 sanxing qiang 100 9 10 2020 7 2 15 westroom -004 pear 2020 6 30 xiaomi qiang 90 5 6 2020 6 20 90 westroom -005 watermelon 2020 7 14 tengxun qiang 100 6 7 2020 6 15 90 eastroom -006 peach 2020 7 12 huawei qiang 100 3 5 2020 7 10 5 eastroom -007 pen 2020 7 14 zhongxing qiang 45 1 2 2020 5 11 365 eastroom -008 camera 2020 7 14 sanxing gift 10 500 650 2020 7 10 365 west-1A -009 computer 2020 6 10 huawei gift 30 3000 4000 2020 6 1 1000 west-1B -010 audio 2020 7 14 xiaomi buy 80 100 150 2020 7 5 180 east-1A -011 phone 2020 6 2 huawei buy 5 5000 6000 2020 6 1 700 east-1B -012 MP3 2020 7 14 zhongxing buy 100 50 70 2020 6 20 365 east-1C \ No newline at end of file diff --git a/code/purchase.cpp b/code/purchase.cpp index 33b84fdd4f616c3824c44b0d58f3a47039f82582..451a76429efc1df70413b93fd55b5ece4472e788 100644 --- a/code/purchase.cpp +++ b/code/purchase.cpp @@ -1,30 +1,25 @@ -#include -#include -#include +#include +#include +#include #include "purchase.h" -suppliers suppliers_head; -suppliers suppliers_tail; -commodity commodity_head; -commodity commodity_tail; - -// 构造一个空的带头结点的进货双向链表 -Status InitList_purchase(purchase &head, purchase &tail) +// һյĴͷĽ˫ +Status InitList_purchase(purchase& head, purchase& tail) { head = (purchase)malloc(sizeof(purchase_information)); - if(!head) + if (!head) exit(OVERFLOW); head->next = NULL; tail = head; return OK; } -// 在进货链表尾部添加一个进货结点 -Status ListAdd_purchase(purchase &tail, char number[], char name[], char source[], char channel[], int quantity, double price, date time) +// ڽβһ +Status ListAdd_purchase(purchase& tail, char number[], char name[], char source[], char channel[], int quantity, double price, date time) { purchase p; p = (purchase)malloc(sizeof(purchase_information)); - if(!p) + if (!p) exit(OVERFLOW); strcpy(p->number, number); strcpy(p->name, name); @@ -42,45 +37,59 @@ Status ListAdd_purchase(purchase &tail, char number[], char name[], char source[ return OK; } -// 在窗口中录出进货信息 -Status Printf_purchas(purchase &p) +// ڴ¼Ϣ +Status Printf_purchas(purchase& p) { printf("%s %s %s %s %d %.2lf %d %d %d\n", p->number, p->name, p->source, p->channel, p->quantity, p->price, p->time.year, p->time.month, p->time.day); return OK; } -// 在文件中导出进货信息 -Status Fprintf_purchas(purchase &p) +// ļеϢ +Status Fprintf_purchas(FILE* fp, purchase& p) { - FILE *fp; - fp = fopen("suppliers2.txt", "a"); - if(fp == NULL) + fprintf(fp, "%s %s %s %s %d %.2lf %d %d %d\n", + p->number, p->name, p->source, p->channel, p->quantity, p->price, p->time.year, p->time.month, p->time.day); + return OK; +} + +// ڴбζÿڵúvisit()һvisit()ʧܣʧ +Status TraverseList_purchas(purchase& head, Status(*visit)(purchase& p)) +{ + purchase p; + p = head->next; + if (!p) { - printf("Can not open the file!"); - exit(INFEASIBLE); + printf("޽Ϣ\n"); + return OK; + } + while (p) + { + if (!visit(p)) + { + printf("Ϣʧܣ\n"); + return ERROR; + } + p = p->next; } - fprintf(fp, "%s %s %s %s %d %lf %d %d %d\n", - p->number, p->name, p->source, p->channel, p->quantity, p->price, p->time.year, p->time.month, p->time.day); - fclose(fp); return OK; } -// 遍历进货链表,依次对每个节点调用函数visit(),一旦visit()失败,则操作失败 -Status TraverseList_purchas(purchase &head, Status(*visit)(purchase &p)) +// ļбζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_purchas(FILE* fp, purchase& head, Status(*visit)(FILE* fp, purchase& p)) { purchase p; p = head->next; - if(!p) + if (!p) { - printf("暂无进货信息!\n"); + fprintf(fp, "޽Ϣ\n"); return OK; } - while(p) + while (p) { - if(!visit(p)) + if (!visit(fp, p)) { - printf("进货信息遍历失败!\n"); + printf("Ϣʧܣ\n"); return ERROR; } p = p->next; @@ -88,25 +97,25 @@ Status TraverseList_purchas(purchase &head, Status(*visit)(purchase &p)) return OK; } -// 在窗口中录出进货链表 -Status DisplayList_purchas(purchase &head) +// ڴ¼ +Status DisplayList_purchas(purchase& head) { TraverseList_purchas(head, Printf_purchas); return OK; } -// 在文件中导出进货链表 -Status FdisplayList_purchas(purchase &head) +// ļе +Status FdisplayList_purchas(FILE* fp, purchase& head) { - TraverseList_purchas(head, Fprintf_purchas); + FtraverseList_purchas(fp, head, Fprintf_purchas); return OK; } -// 构造一个空的带头结点的供应商双向链表 -Status InitList_suppliers(suppliers &head, suppliers &tail) +// һյĴͷĹӦ˫ +Status InitList_suppliers(suppliers& head, suppliers& tail) { head = (suppliers)malloc(sizeof(suppliers_information)); - if(!head) + if (!head) exit(OVERFLOW); head->next = NULL; tail = head; @@ -114,13 +123,13 @@ Status InitList_suppliers(suppliers &head, suppliers &tail) return OK; } -// 查找供应商公司名称与关键字匹配的供应商结点 -Status ListHandle_suppliers(suppliers &head, suppliers &p, char corporate_name[]) +// ҹӦ̹˾ؼƥĹӦ̽ +Status ListHandle_suppliers(suppliers& head, suppliers& p, char corporate_name[]) { p = head->next; - while(p) + while (p) { - if(strcmp(p->corporate_name, corporate_name) == 0) + if (strcmp(p->corporate_name, corporate_name) == 0) { break; } @@ -129,12 +138,12 @@ Status ListHandle_suppliers(suppliers &head, suppliers &p, char corporate_name[] return OK; } -// 在供应商链表尾部添加一个供应商结点 -Status ListAdd_suppliers(suppliers &tail, char corporate_name[], char main_business[], char main_products[], char brand[], char contact_person[], char telephone[]) +// ڹӦβһӦ̽ +Status ListAdd_suppliers(suppliers& tail, char corporate_name[], char main_business[], char main_products[], char brand[], char contact_person[], char telephone[]) { suppliers p; p = (suppliers)malloc(sizeof(suppliers_information)); - if(!p) + if (!p) exit(OVERFLOW); strcpy(p->corporate_name, corporate_name); strcpy(p->main_business, main_business); @@ -150,8 +159,8 @@ Status ListAdd_suppliers(suppliers &tail, char corporate_name[], char main_busin return OK; } -// 从窗口中录入供应商信息 -Status Add_suppliers(suppliers &head, suppliers &tail) +// Ӵ¼빩ӦϢ +Status Add_suppliers(suppliers& head, suppliers& tail) { suppliers p; char corporate_name[MAX_SIZE]; @@ -160,15 +169,15 @@ Status Add_suppliers(suppliers &head, suppliers &tail) char brand[MAX_SIZE]; char contact_person[MAX_SIZE]; char telephone[MAX_SIZE]; - printf("请依次输入“公司名称、主营业务、主营产品、品牌、联络人、电话”,以空格作为结尾。\n"); - while(1) + printf("롰˾ơӪҵӪƷƷơˡ绰ԿոΪβ\n"); + while (1) { scanf("%s %s %s %s %s %s", corporate_name, main_business, main_products, brand, contact_person, telephone); ListHandle_suppliers(head, p, corporate_name); - if(p) + if (p) { - printf("公司名称为 %s 的供应商已存在,无需添加。\n", p->corporate_name); - if(getchar() == ' ') + printf("˾Ϊ%sĹӦѴڣӡ\n", corporate_name); + if (getchar() == ' ') { break; } @@ -176,19 +185,19 @@ Status Add_suppliers(suppliers &head, suppliers &tail) continue; } ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); - if(getchar() == ' ') + if (getchar() == ' ') { break; } } - printf("供应商信息录入成功!\n"); + printf("ӦϢ¼ɹ\n"); return OK; } -// 从文件中导入供应商信息 -Status Fadd_suppliers(suppliers &head, suppliers &tail) +// ļе빩ӦϢ +Status Fadd_suppliers(suppliers& head, suppliers& tail) { - FILE *fp; + FILE* fp; suppliers p; char corporate_name[MAX_SIZE]; char main_business[MAX_SIZE]; @@ -197,19 +206,19 @@ Status Fadd_suppliers(suppliers &head, suppliers &tail) char contact_person[MAX_SIZE]; char telephone[MAX_SIZE]; fp = fopen("suppliers1.txt", "r"); - if(fp == NULL) + if (fp == NULL) { printf("Can not open the file!"); exit(INFEASIBLE); } - while(1) + while (1) { fscanf(fp, "%s %s %s %s %s %s", corporate_name, main_business, main_products, brand, contact_person, telephone); ListHandle_suppliers(head, p, corporate_name); - if(p) + if (p) { - printf("公司名称为 %s 的供应商已存在,无需添加!\n", p->corporate_name); - if(fgetc(fp) == ' ') + printf("˾Ϊ%sĹӦѴڣ!\n", corporate_name); + if (fgetc(fp) == ' ') { break; } @@ -217,41 +226,41 @@ Status Fadd_suppliers(suppliers &head, suppliers &tail) continue; } ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); - if(fgetc(fp) == ' ') + if (fgetc(fp) == ' ') { break; } } fclose(fp); - printf("供应商信息导入成功!\n"); + printf("ӦϢɹ\n"); return OK; } -// 删除供应商公司名称与关键字匹配的供应商结点 -Status ListDelete_suppliers(suppliers &head) +// ɾӦ̹˾ؼƥĹӦ̽ +Status ListDelete_suppliers(suppliers& head) { suppliers p; char corporate_name[MAX_SIZE]; - printf("请输入要删除供应商的公司名称:\n"); + printf("ҪɾӦ̵Ĺ˾ƣ\n"); scanf("%s", corporate_name); ListHandle_suppliers(head, p, corporate_name); - if(!p) + if (!p) { - printf("未找到公司名称为 %s 的供应商,无需删除!\n",corporate_name); + printf("δҵ˾Ϊ%sĹӦ,ɾ\n", corporate_name); return ERROR; } - if(p->next) + if (p->next) { p->next->pre = p->pre; } p->pre->next = p->next; free(p); - printf("供应商信息删除成功!\n"); + printf("ӦϢɾɹ\n"); return OK; } -// 修改供应商公司名称与关键字匹配的供应商结点 -Status ListAlter_suppliers(suppliers &head, suppliers &tail) +// ޸ĹӦ̹˾ؼƥĹӦ̽ +Status ListAlter_suppliers(suppliers& head, suppliers& tail) { suppliers p; char corporate_name[MAX_SIZE]; @@ -262,35 +271,36 @@ Status ListAlter_suppliers(suppliers &head, suppliers &tail) char telephone[MAX_SIZE]; char option; bool flag = false; - printf("请输入要修改供应商的公司名称:\n"); + printf("Ҫ޸ĹӦ̵Ĺ˾ƣ\n"); scanf("%s", corporate_name); getchar(); ListHandle_suppliers(head, p, corporate_name); - if(!p) + if (!p) { - printf("未找到公司名称为 %s 的供应商,是否添加?(y/n)\n", corporate_name); - while(!flag) + printf("δҵ˾Ϊ%sĹӦ̣Ƿӣy/n\n", corporate_name); + while (!flag) { scanf("%c", &option); - switch(option) + switch (option) { - case 'y': - printf("请依次输入“主营业务、主营产品、品牌、联络人、电话”\n"); - scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); - ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); - printf("供应商信息添加成功!\n"); - return OK; - case 'n': - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 'y': + printf("롰ӪҵӪƷƷơˡ绰\n"); + scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); + ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); + printf("ӦϢӳɹ\n"); + return OK; + case 'n': + printf("ӦϢʧܣ\n"); + flag = true; + break; + default: + printf("룡\n"); + break; } } return ERROR; } - printf("请依次输入“公司名称、主营业务、主营产品、品牌、联络人、电话”\n"); + printf("롰˾ơӪҵӪƷƷơˡ绰\n"); scanf("%s %s %s %s %s %s", corporate_name, main_business, main_products, brand, contact_person, telephone); strcpy(p->corporate_name, corporate_name); strcpy(p->main_business, main_business); @@ -298,12 +308,12 @@ Status ListAlter_suppliers(suppliers &head, suppliers &tail) strcpy(p->brand, brand); strcpy(p->contact_person, contact_person); strcpy(p->telephone, telephone); - printf("供应商信息修改成功!\n"); + printf("ӦϢ޸ijɹ\n"); return OK; } -// 查询供应商公司名称与关键字匹配的供应商结点供应商信息 -Status ListSearch_suppliers(suppliers &head, suppliers &tail) +// ѯӦ̹˾ؼƥĹӦ̽㹩ӦϢ +Status ListSearch_suppliers(suppliers& head, suppliers& tail) { suppliers p; char corporate_name[MAX_SIZE]; @@ -314,30 +324,31 @@ Status ListSearch_suppliers(suppliers &head, suppliers &tail) char telephone[MAX_SIZE]; char option; bool flag = false; - printf("请输入要查询供应商的公司名称:\n"); + printf("ҪѯӦ̵Ĺ˾ƣ\n"); scanf("%s", corporate_name); getchar(); ListHandle_suppliers(head, p, corporate_name); - if(!p) + if (!p) { - printf("未找到公司名称为 %s 的供应商,是否添加?(y/n)\n", corporate_name); - while(!flag) + printf("δҵ˾Ϊ%sĹӦ̣Ƿӣy/n\n", corporate_name); + while (!flag) { scanf("%c", &option); - switch(option) + switch (option) { - case 'y': - printf("请依次输入“主营业务、主营产品、品牌、联络人、电话”\n"); - scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); - ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); - printf("供应商信息添加成功!\n"); - return OK; - case 'n': - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 'y': + printf("롰ӪҵӪƷƷơˡ绰\n"); + scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); + ListAdd_suppliers(tail, corporate_name, main_business, main_products, brand, contact_person, telephone); + printf("ӦϢӳɹ\n"); + return OK; + case 'n': + printf("ӦϢʧܣ\n"); + flag = true; + break; + default: + printf("룡\n"); + break; } } return ERROR; @@ -346,92 +357,167 @@ Status ListSearch_suppliers(suppliers &head, suppliers &tail) return OK; } -// 在窗口中录出供应商信息 -Status Printf_suppliers(suppliers &p) +// ڴ¼ӦϢ +Status Printf_suppliers(suppliers& p) { printf("%s %s %s %s %s %s\n", p->corporate_name, p->main_business, p->main_products, p->brand, p->contact_person, p->telephone); DisplayList_purchas(p->purchase_head); return OK; } -// 在文件中导出供应商信息 -Status Fprintf_suppliers(suppliers &p) +// ļеӦϢ +Status Fprintf_suppliers(FILE* fp, suppliers& p) { - FILE *fp; - fp = fopen("suppliers2.txt", "a"); - if(fp == NULL) + fprintf(fp, "%s %s %s %s %s %s\n", p->corporate_name, p->main_business, p->main_products, p->brand, p->contact_person, p->telephone); + FdisplayList_purchas(fp, p->purchase_head); + return OK; +} + +// ڴбӦζÿڵúvisit()һvisit()ʧܣʧ +Status TraverseList_suppliers(suppliers& head, Status(*visit)(suppliers& p)) +{ + suppliers p; + p = head->next; + if (!p) { - printf("Can not open the file!"); - exit(INFEASIBLE); + printf("޹ӦϢ\n"); + return OK; + } + while (p) + { + if (!visit(p)) + { + printf("ӦϢʧܣ\n"); + return ERROR; + } + p = p->next; } - fprintf(fp, "%s %s %s %s %s %s\n", p->corporate_name, p->main_business, p->main_products, p->brand, p->contact_person, p->telephone); - fclose(fp); - FdisplayList_purchas(p->purchase_head); return OK; } -// 遍历供应商链表,依次对每个节点调用函数visit(),一旦visit()失败,则操作失败 -Status TraverseList_suppliers(suppliers &head, Status(*visit)(suppliers &p)) +// ļбӦζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_suppliers1(suppliers& head, Status(*visit)(FILE* fp, suppliers& p)) { + FILE* fp; suppliers p; + fp = fopen("suppliers2.txt", "a"); + if (fp == NULL) + { + printf("Can not open the file!"); + exit(INFEASIBLE); + } p = head->next; - if(!p) + if (!p) { - printf("暂无供应商信息!\n"); + fprintf(fp, "޹ӦϢ\n"); return OK; } - while(p) + while (p) { - if(!visit(p)) + if (!visit(fp, p)) { - printf("供应商信息遍历失败!\n"); + printf("ӦϢʧܣ\n"); return ERROR; } p = p->next; } + fclose(fp); return OK; } -// 在窗口中录出供应商链表 -Status DisplayList_suppliers(suppliers &head) +// ڴ¼Ӧ +Status DisplayList_suppliers(suppliers& head) { TraverseList_suppliers(head, Printf_suppliers); - printf("供应商信息录出成功!\n"); + printf("ӦϢ¼ɹ\n"); + return OK; +} + +// ļеӦ +Status FdisplayList_suppliers(suppliers& head) +{ + FtraverseList_suppliers1(head, Fprintf_suppliers); + printf("ӦϢɹ\n"); return OK; } -// 在文件中导出供应商链表 -Status FdisplayList_suppliers(suppliers &head) +// 湩ӦϢ +Status Save_suppliers(FILE* fp, suppliers& p) { - TraverseList_suppliers(head, Fprintf_suppliers); - printf("供应商信息导出成功!\n"); + fprintf(fp, "%s %s %s %s %s %s", p->corporate_name, p->main_business, p->main_products, p->brand, p->contact_person, p->telephone); + if (p->next) + { + fprintf(fp, "\n"); + } + else + { + fprintf(fp, " "); + } return OK; } -// 构造一个空的带头结点的商品向链表 -Status InitList_commodity(commodity &head, commodity &tail) +// ļӦζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_suppliers2(suppliers& head, Status(*visit)(FILE* fp, suppliers& p)) +{ + FILE* fp; + suppliers p; + fp = fopen("suppliers1.txt", "w"); + if (fp == NULL) + { + printf("Can not open the file!"); + exit(INFEASIBLE); + } + p = head->next; + if (!p) + { + fprintf(fp, "޹ӦϢ\n"); + return OK; + } + while (p) + { + if (!visit(fp, p)) + { + printf("ӦϢʧܣ\n"); + return ERROR; + } + p = p->next; + } + fclose(fp); + printf("ӦϢɹ\n"); + return OK; +} + +// 湩Ӧ +Status Keep_suppliers(suppliers& head) +{ + FtraverseList_suppliers2(head, Save_suppliers); + return OK; +} + +// һյĴͷƷ +Status InitList_commodity(commodity& head, commodity& tail) { head = (commodity)malloc(sizeof(goods)); - if(!head) + if (!head) exit(OVERFLOW); head->next = NULL; tail = head; return OK; } -// 在商品链表尾部添加一个商品结点 -Status ListAdd_commodity(commodity &tail, char id_Number[], char goods_Name[], char place[], - double buy_Price, double sell_Price, int remain_Number, int quality_Date, date purchase_Date, date produce_Date) +// ƷβһƷ +Status ListAdd_commodity(commodity& tail, char id_Number[], char goods_Name[], char place[], + double buy_Prise, double sell_Prise, int remain_Number, int quality_Date, date purchase_Date, date produce_Date) { commodity p; p = (commodity)malloc(sizeof(goods)); - if(!p) + if (!p) exit(OVERFLOW); strcpy(p->id_Number, id_Number); strcpy(p->goods_Name, goods_Name); strcpy(p->place, place); - p->buy_Price = buy_Price; - p->sell_Price = sell_Price; + p->buy_Prise = buy_Prise; + p->sell_Prise = sell_Prise; p->remain_Number = remain_Number; p->quality_Date = quality_Date; p->purchase_Date.year = purchase_Date.year; @@ -447,13 +533,13 @@ Status ListAdd_commodity(commodity &tail, char id_Number[], char goods_Name[], c return OK; } -// 查找商品编号与关键字匹配的供应商结点 -Status ListHandle_commodity(commodity &head, commodity &p, char id_Number[]) +// ƷؼƥĹӦ̽ +Status ListHandle_commodity(commodity& head, commodity& p, char id_Number[]) { p = head->next; - while(p) + while (p) { - if(strcmp(p->id_Number, id_Number) == 0) + if (strcmp(p->id_Number, id_Number) == 0) { break; } @@ -462,8 +548,8 @@ Status ListHandle_commodity(commodity &head, commodity &p, char id_Number[]) return OK; } -// 从窗口中录入商品信息 -Status Add_commodity(commodity &head, commodity &tail, suppliers &suppliers_head, suppliers &suppliers_tail) +// Ӵ¼ƷϢ +Status Add_commodity(commodity& head, commodity& tail, suppliers& suppliers_head, suppliers& suppliers_tail) { commodity p; suppliers suppliers_p; @@ -477,63 +563,63 @@ Status Add_commodity(commodity &head, commodity &tail, suppliers &suppliers_head char brand[MAX_SIZE]; char contact_person[MAX_SIZE]; char telephone[MAX_SIZE]; - double buy_Price; - double sell_Price; + double buy_Prise; + double sell_Prise; int quantity; int quality_Date; date purchase_Date; date produce_Date; bool flag = false; - printf("请依次输入“商品编号、商品名称、进货日期、进货来源(供应商)、进货渠道、进货数量、商品进价、商品售价、生产日期、保质期、库存位置”,以空格作为结尾。\n"); - while(1) + printf("롰ƷšƷơڡԴӦ̣ƷۡƷۼۡڡڡλáԿոΪβ\n"); + while (1) { scanf("%s %s %d %d %d %s %s %d %lf %lf %d %d %d %d %s", id_Number, goods_Name, &purchase_Date.year, &purchase_Date.month, &purchase_Date.day, source, channel, &quantity, - &buy_Price, &sell_Price, &produce_Date.year, &produce_Date.month, &produce_Date.day, &quality_Date, place); - if(getchar() == ' ') + &buy_Prise, &sell_Prise, &produce_Date.year, &produce_Date.month, &produce_Date.day, &quality_Date, place); + if (getchar() == ' ') { flag = true; } ListHandle_commodity(head, p, id_Number); - if(p) + if (p) { - if(strcmp(p->goods_Name, goods_Name) != 0 || strcmp(p->place, place) != 0 - || p->buy_Price != buy_Price || p->sell_Price != sell_Price || p->quality_Date != quality_Date + if (strcmp(p->goods_Name, goods_Name) != 0 || strcmp(p->place, place) != 0 + || p->buy_Prise != buy_Prise || p->sell_Prise != sell_Prise || p->quality_Date != quality_Date || p->purchase_Date.year != purchase_Date.year || p->purchase_Date.month != purchase_Date.month || p->purchase_Date.day != purchase_Date.day || p->produce_Date.year != produce_Date.year || p->produce_Date.month != produce_Date.month || p->produce_Date.day != produce_Date.day) { - printf("编号 %s 已存在商品信息\n", id_Number); + printf("š%sѴƷϢ\n", id_Number); return ERROR; } p->remain_Number += quantity; } else - ListAdd_commodity(tail, id_Number, goods_Name, place, buy_Price, sell_Price, quantity, quality_Date, purchase_Date, produce_Date); + ListAdd_commodity(tail, id_Number, goods_Name, place, buy_Prise, sell_Prise, quantity, quality_Date, purchase_Date, produce_Date); ListHandle_suppliers(suppliers_head, suppliers_p, source); - if(!suppliers_p) + if (!suppliers_p) { - printf("未找到公司名称为 %s 的供应商,请先添加!\n", source); - printf("请依次输入“主营业务、主营产品、品牌、联络人、电话”\n"); + printf("δҵ˾Ϊ%sĹӦ̣!\n", source); + printf("롰ӪҵӪƷƷơˡ绰\n"); scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); ListAdd_suppliers(suppliers_tail, source, main_business, main_products, brand, contact_person, telephone); - printf("供应商信息添加成功!\n"); + printf("ӦϢӳɹ\n"); ListHandle_suppliers(suppliers_head, suppliers_p, source); } - ListAdd_purchase(suppliers_p->purchase_tail, id_Number, goods_Name, source, channel, quantity, buy_Price, purchase_Date); - if(flag == true) + ListAdd_purchase(suppliers_p->purchase_tail, id_Number, goods_Name, source, channel, quantity, buy_Prise, purchase_Date); + if (flag == true) { break; } } - printf("商品信息录入成功!\n"); - printf("进货信息录入成功!\n"); + printf("ƷϢ¼ɹ\n"); + printf("Ϣ¼ɹ\n"); return OK; } -// 从文件中导入商品信息 -Status Fadd_commodity(commodity &head, commodity &tail, suppliers &suppliers_head, suppliers &suppliers_tail) +// ļеƷϢ +Status Fadd_commodity(commodity& head, commodity& tail, suppliers& suppliers_head, suppliers& suppliers_tail) { - FILE *fp; + FILE* fp; commodity p; suppliers suppliers_p; char id_Number[20]; @@ -546,234 +632,235 @@ Status Fadd_commodity(commodity &head, commodity &tail, suppliers &suppliers_hea char brand[MAX_SIZE]; char contact_person[MAX_SIZE]; char telephone[MAX_SIZE]; - double buy_Price; - double sell_Price; + double buy_Prise; + double sell_Prise; int quantity; int quality_Date; date purchase_Date; date produce_Date; bool flag = false; fp = fopen("commodity1.txt", "r"); - if(fp == NULL) + if (fp == NULL) { printf("Can not open the file!"); exit(INFEASIBLE); } - while(1) + while (1) { fscanf(fp, "%s %s %d %d %d %s %s %d %lf %lf %d %d %d %d %s", id_Number, goods_Name, &purchase_Date.year, &purchase_Date.month, &purchase_Date.day, source, channel, &quantity, - &buy_Price, &sell_Price, &produce_Date.year, &produce_Date.month, &produce_Date.day, &quality_Date, place); - if(fgetc(fp) == ' ') + &buy_Prise, &sell_Prise, &produce_Date.year, &produce_Date.month, &produce_Date.day, &quality_Date, place); + if (fgetc(fp) == ' ') { flag = true; } ListHandle_commodity(head, p, id_Number); - if(p) + if (p) { - if(strcmp(p->goods_Name, goods_Name) != 0 || strcmp(p->place, place) != 0 - || p->buy_Price != buy_Price || p->sell_Price != sell_Price || p->quality_Date != quality_Date + if (strcmp(p->goods_Name, goods_Name) != 0 || strcmp(p->place, place) != 0 + || p->buy_Prise != buy_Prise || p->sell_Prise != sell_Prise || p->quality_Date != quality_Date || p->purchase_Date.year != purchase_Date.year || p->purchase_Date.month != purchase_Date.month || p->purchase_Date.day != purchase_Date.day || p->produce_Date.year != produce_Date.year || p->produce_Date.month != produce_Date.month || p->produce_Date.day != produce_Date.day) { - printf("编号 %s 已存在商品信息\n", id_Number); + printf("š%sѴƷϢ\n", id_Number); return ERROR; } p->remain_Number += quantity; } else - ListAdd_commodity(tail, id_Number, goods_Name, place, buy_Price, sell_Price, quantity, quality_Date, purchase_Date, produce_Date); + ListAdd_commodity(tail, id_Number, goods_Name, place, buy_Prise, sell_Prise, quantity, quality_Date, purchase_Date, produce_Date); ListHandle_suppliers(suppliers_head, suppliers_p, source); - if(!suppliers_p) + if (!suppliers_p) { - printf("未找到公司名称为 %s 的供应商,请先添加!\n", source); - printf("请依次输入“主营业务、主营产品、品牌、联络人、电话”\n"); + printf("δҵ˾Ϊ%sĹӦ̣!\n", source); + printf("롰ӪҵӪƷƷơˡ绰\n"); scanf("%s %s %s %s %s", main_business, main_products, brand, contact_person, telephone); ListAdd_suppliers(suppliers_tail, source, main_business, main_products, brand, contact_person, telephone); - printf("供应商信息添加成功!\n"); + printf("ӦϢӳɹ\n"); ListHandle_suppliers(suppliers_head, suppliers_p, source); } - ListAdd_purchase(suppliers_p->purchase_tail, id_Number, goods_Name, source, channel, quantity, buy_Price, purchase_Date); - if(flag == true) + ListAdd_purchase(suppliers_p->purchase_tail, id_Number, goods_Name, source, channel, quantity, buy_Prise, purchase_Date); + if (flag == true) { break; } } fclose(fp); - printf("商品信息导入成功!\n"); - printf("进货信息导入成功!\n"); + printf("ƷϢɹ\n"); + printf("Ϣɹ\n"); return OK; } -// 添加供应商信息界面 -Status Interface_add_suppliers(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail) +// ӹӦϢ +Status Interface_add_suppliers(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail) { int option; bool flag = false; system("cls"); - printf("添加供应商信息界面\n1.从窗口中录入供应商信息\n2.从文件中导入供应商信息\n3.返回上一级界面\n4.返回主界面\n"); - while(!flag) + printf("ӹӦϢ\n1.Ӵ¼빩ӦϢ\n2.ļе빩ӦϢ\n3.һ\n4.\n"); + while (!flag) { scanf("%d", &option); - switch(option) + switch (option) { - case 1: - Add_suppliers(suppliers_head, suppliers_tail); - break; - case 2: - Fadd_suppliers(suppliers_head, suppliers_tail); - break; - case 3: - Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 4: - Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 1: + Add_suppliers(suppliers_head, suppliers_tail); + break; + case 2: + Fadd_suppliers(suppliers_head, suppliers_tail); + break; + case 3: + Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 4: + Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + default: + printf("룡\n"); + break; } } return OK; } -// 打印供应商信息界面 -Status Interface_print_suppliers(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail) +// ӡӦϢ +Status Interface_print_suppliers(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail) { int option; bool flag = false; system("cls"); - printf("打印供应商信息界面\n1.从窗口中录出供应商信息\n2.从文件中导出供应商信息\n3.返回上一级界面\n4.返回主界面\n"); - while(!flag) + printf("ӡӦϢ\n1.ڴ¼ӦϢ\n2.ļеӦϢ\n3.һ\n4.\n"); + while (!flag) { scanf("%d", &option); - switch(option) + switch (option) { - case 1: - DisplayList_suppliers(suppliers_head); - break; - case 2: - FdisplayList_suppliers(suppliers_head); - break; - case 3: - Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 4: - Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 1: + DisplayList_suppliers(suppliers_head); + break; + case 2: + FdisplayList_suppliers(suppliers_head); + break; + case 3: + Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 4: + Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + default: + printf("룡\n"); + break; } } return OK; } -// 供应商信息管理界面 -Status Interface_suppliers_management(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail) +// ӦϢ +Status Interface_suppliers_management(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail) { int option; bool flag = false; system("cls"); - printf("供应商信息管理界面\n1.添加供应商信息\n2.删除供应商信息\n3.修改供应商信息\n4.查询供应商信息\n5.打印供应商信息\n6.返回主界面\n"); - while(!flag) + printf("ӦϢ\n1.ӹӦϢ\n2.ɾӦϢ\n3.޸ĹӦϢ\n4.ѯӦϢ\n5.ӡӦϢ\n6.\n"); + while (!flag) { scanf("%d", &option); - switch(option) + switch (option) { - case 1: - Interface_add_suppliers(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 2: - ListDelete_suppliers(suppliers_head); - break; - case 3: - ListAlter_suppliers(suppliers_head, suppliers_tail); - break; - case 4: - ListSearch_suppliers(suppliers_head, suppliers_tail); - break; - case 5: - Interface_print_suppliers(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 6: - Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 1: + Interface_add_suppliers(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 2: + ListDelete_suppliers(suppliers_head); + break; + case 3: + ListAlter_suppliers(suppliers_head, suppliers_tail); + break; + case 4: + ListSearch_suppliers(suppliers_head, suppliers_tail); + break; + case 5: + Interface_print_suppliers(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 6: + Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + default: + printf("룡\n"); + break; } } return OK; } -// 进货管理界面 -Status Interface_purchase_management(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail) +// +Status Interface_purchase_management(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail) { int option; bool flag = false; system("cls"); - printf("进货管理界面\n1.从窗口中录入商品信息和进货信息\n2.从文件中导入商品信息和进货信息\n3.返回主界面\n"); - while(!flag) + printf("\n1.Ӵ¼ƷϢͽϢ\n2.ļеƷϢͽϢ\n3.\n"); + while (!flag) { scanf("%d", &option); - switch(option) + switch (option) { - case 1: - Add_commodity(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - break; - case 2: - Fadd_commodity(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - break; - case 3: - Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - default: - printf("输入有误,请重新输入!\n"); - break; + case 1: + Add_commodity(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + break; + case 2: + Fadd_commodity(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + break; + case 3: + Main_interface(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + default: + printf("룡\n"); + break; } } return OK; } -// 主界面 -Status Main_interface(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail) +// +Status Main_interface(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail) { int option; bool flag = false; system("cls"); - printf("主界面\n1.供应商信息管理\n2.进货管理\n3.退出主界面\n"); - while(!flag) + printf("\n1.ӦϢ\n2.\n3.˳\n"); + while (!flag) { scanf("%d", &option); - switch(option) + switch (option) { - case 1: - Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 2: - Interface_purchase_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); - flag = true; - break; - case 3: - return OK; - default: - printf("输入有误,请重新输入!\n"); - break; + case 1: + Interface_suppliers_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 2: + Interface_purchase_management(commodity_head, commodity_tail, suppliers_head, suppliers_tail); + flag = true; + break; + case 3: + Keep_suppliers(suppliers_head); + return OK; + default: + printf("룡\n"); + break; } } return OK; diff --git a/code/purchase.h b/code/purchase.h index 9dd0e32a1e71ee6f0924d9f762924223758659b3..0c619965810d779233e485a314568f7c8406da55 100644 --- a/code/purchase.h +++ b/code/purchase.h @@ -1,7 +1,8 @@ -#ifndef __PURCHASE_H__ -#define __PURCHASE_H__ +#include // ׼ͷļṹ +#ifndef __PURCHASE_H__ +#define __PURCHASE_H__ // #define MAX_SIZE 30 @@ -18,12 +19,14 @@ typedef int Status; // ʱṹ壬洢ꡢ¡Ϣ -#include "date.h" - -// Ʒ棩ṹ -#include "sell.h" +struct date +{ + int year; // + int month; // + int day; // +}; -/* ˫ĵڵ㣬ӦĽṹԱͬʱ޸Ĺ캯purchase.cppУ */ +/* ˫ĵڵ㣬ӦĽṹԱ */ // ϢԳеIJɹй洢Щʱ䡢Դ/۸Ϣ typedef struct purchase_information @@ -35,12 +38,12 @@ typedef struct purchase_information int quantity; // double price; // ۸ date time; // ʱ - purchase_information *pre; // һָ - purchase_information *next; // һָ + purchase_information* pre; // һָ + purchase_information* next; // һָ }*purchase; // ӦϢ洢˾ơӪҵ/ƷƷơˡ绰Ϣ -struct suppliers_information +typedef struct suppliers_information { char corporate_name[MAX_SIZE]; // ˾ char main_business[MAX_SIZE]; // Ӫҵ @@ -50,110 +53,130 @@ struct suppliers_information char telephone[MAX_SIZE]; // 绰 purchase purchase_head; // Ϣͷڵ purchase purchase_tail; // Ϣβ - suppliers_information *pre; // һӦָ - suppliers_information *next; // һӦָ -}; -typedef struct suppliers_information *suppliers; + suppliers_information* pre; // һӦָ + suppliers_information* next; // һӦָ +}*suppliers; -extern suppliers suppliers_head; -extern suppliers suppliers_tail; -extern commodity commodity_head; -extern commodity commodity_tail; +typedef struct goods +{ + char id_Number[20]; // Ʒ + char goods_Name[20]; // Ʒ + char place[20]; // λ + double buy_Prise; // Ʒ + double sell_Prise; // Ʒۼ + int remain_Number; // Ʒ + int quality_Date; // + date purchase_Date; // + date produce_Date; // + goods* pre; // һƷָ + goods* next; // һƷָ +}*commodity; // һյĴͷĽ˫ -Status InitList_purchase(purchase &head, purchase &tail); +Status InitList_purchase(purchase& head, purchase& tail); // ڽβһ -Status ListAdd_purchase(purchase &tail, char number[], char name[], char source[], char channel[], int quantity, double price, date time); +Status ListAdd_purchase(purchase& tail, char number[], char name[], char source[], char channel[], int quantity, double price, date time); // ڴ¼Ϣ -Status Printf_purchas(purchase &p); +Status Printf_purchas(purchase& p); // ļеϢ -Status Fprintf_purchas(purchase &p); +Status Fprintf_purchas(FILE* fp, purchase& p); + +// ڴбζÿڵúvisit()һvisit()ʧܣʧ +Status TraverseList_purchas(purchase& head, Status(*visit)(purchase& p)); -// ζÿڵúvisit()һvisit()ʧܣʧ -Status TraverseList_purchas(purchase &head, Status(*visit)(purchase &p)); +// ļбζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_purchas(FILE* fp, purchase& head, Status(*visit)(FILE* fp, purchase& p)); // ڴ¼ -Status DisplayList_purchas(purchase &head); +Status DisplayList_purchas(purchase& head); // ļе -Status FdisplayList_purchas(purchase &head); +Status FdisplayList_purchas(FILE* fp, purchase& head); // һյĴͷĹӦ˫ -Status InitList_suppliers(suppliers &head, suppliers &tail); +Status InitList_suppliers(suppliers& head, suppliers& tail); // ҹӦ̹˾ؼƥĹӦ̽ -Status ListHandle_suppliers(suppliers &head, suppliers &p, char corporate_name[]); +Status ListHandle_suppliers(suppliers& head, suppliers& p, char corporate_name[]); // ڹӦβһӦ̽ -Status ListAdd_suppliers(suppliers &tail, char corporate_name[], char main_business[], char main_products[], char brand[], char contact_person[], char telephone[]); +Status ListAdd_suppliers(suppliers& tail, char corporate_name[], char main_business[], char main_products[], char brand[], char contact_person[], char telephone[]); // Ӵ¼빩ӦϢ -Status Add_suppliers(suppliers &head, suppliers &tail); +Status Add_suppliers(suppliers& head, suppliers& tail); // ļе빩ӦϢ -Status Fadd_suppliers(suppliers &head, suppliers &tail); +Status Fadd_suppliers(suppliers& head, suppliers& tail); // ɾӦ̹˾ؼƥĹӦ̽ -Status ListDelete_suppliers(suppliers &head); +Status ListDelete_suppliers(suppliers& head); // ޸ĹӦ̹˾ؼƥĹӦ̽ -Status ListAlter_suppliers(suppliers &head, suppliers &tail); +Status ListAlter_suppliers(suppliers& head, suppliers& tail); // ѯӦ̹˾ؼƥĹӦ̽㹩ӦϢ -Status ListSearch_suppliers(suppliers &head, suppliers &tail); +Status ListSearch_suppliers(suppliers& head, suppliers& tail); // ڴӦϢ -Status Printf_suppliers(suppliers &p); +Status Printf_suppliers(suppliers& p); // ļеӦϢ -Status Fprintf_suppliers(suppliers &p); +Status Fprintf_suppliers(FILE* fp, suppliers& p); -// Ӧζÿڵúvisit()һvisit()ʧܣʧ -Status TraverseList_suppliers(suppliers &head, Status(*visit)(suppliers &p)); +// ڴбӦζÿڵúvisit()һvisit()ʧܣʧ +Status TraverseList_suppliers(suppliers& head, Status(*visit)(suppliers& p)); + +// ļбӦζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_suppliers1(suppliers& head, Status(*visit)(FILE* fp, suppliers& p)); // ڴ¼Ӧ -Status DisplayList_suppliers(suppliers &head); +Status DisplayList_suppliers(suppliers& head); // ļеӦ -Status FdisplayList_suppliers(suppliers &head); +Status FdisplayList_suppliers(suppliers& head); + +// 湩ӦϢ +Status Save_suppliers(FILE* fp, suppliers& p); + +// ļӦζÿڵúvisit()һvisit()ʧܣʧ +Status FtraverseList_suppliers2(suppliers& head, Status(*visit)(FILE* fp, suppliers& p)); + +// 湩Ӧ +Status Keep_suppliers(suppliers& head); // һյĴͷƷ -Status InitList_commodity(commodity &head, commodity &tail); +Status InitList_commodity(commodity& head, commodity& tail); // ƷβһƷ -Status ListAdd_commodity(commodity &tail, char id_Number[], char goods_Name[], char place[], +Status ListAdd_commodity(commodity& tail, char id_Number[], char goods_Name[], char place[], double buy_Prise, double sell_Prise, int remain_Number, int quality_Date, date purchase_Date, date produce_Date); // ƷؼƥĹӦ̽ -Status ListHandle_commodity(commodity &head, commodity &p, char id_Number[]); +Status ListHandle_commodity(commodity& head, commodity& p, char id_Number[]); // Ӵ¼ƷϢ -Status Add_commodity(commodity &head, commodity &tail, suppliers &suppliers_head, suppliers &suppliers_tail); +Status Add_commodity(commodity& head, commodity& tail, suppliers& suppliers_head, suppliers& suppliers_tail); // ļеƷϢ -Status Fadd_commodity(commodity &head, commodity &tail, suppliers &suppliers_head, suppliers &suppliers_tail); +Status Fadd_commodity(commodity& head, commodity& tail, suppliers& suppliers_head, suppliers& suppliers_tail); // ӹӦϢ -Status Interface_add_suppliers(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail); - -// ӡӦϢ -Status Interface_print_suppliers(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail); +Status Interface_add_suppliers(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail); // ӦϢ -Status Interface_suppliers_management(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail); +Status Interface_suppliers_management(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail); // -Status Interface_purchase_management(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail); +Status Interface_purchase_management(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail); // -Status Main_interface(commodity &commodity_head, commodity &commodity_tail, - suppliers &suppliers_head, suppliers &suppliers_tail); +Status Main_interface(commodity& commodity_head, commodity& commodity_tail, + suppliers& suppliers_head, suppliers& suppliers_tail); #endif \ No newline at end of file