食堂用户菜品关系系统(C语言课设)

#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
//用户的相关操作
int Umanu();//用户操作列表
void Uoperate(int function);//用户的指令判定
struct Users* ReadFile(char* filename);//读取之前文件之中的用户数据
struct Users* login(struct Users* Uhead);//创建用户的操作
void reg(struct Users* Uhead);//登录操作
void writeFile(struct Users* head, char* filename);//将用户信息写入文件
void Uchange(struct Users* head);//修改用户密码void operate();//操作列表
void SearchCook(struct cook* head);//寻找对应菜品,内部调用search和print
struct cook* search(struct cook* head);//小的搜索函数,执行指定搜索
void Write(struct cook* head, char* filename);//写入菜品数据
void Comment(struct cook* head);//评价菜品
void Add(struct cook* head);//在链表末尾加入新的菜品
void Allprint(struct cook* head);//打印链表中的全部元素
void print(struct cook* temp);//打印单个节点,作为内部工具类函数存在
void Change(struct cook* head);//修改菜品内容
struct cook* Read(char* filename);//读出存入的菜品内容struct Users
{char ID[21];//用户的IDchar passWord[21];//用户的密码struct Users* next;//链表操作,指向下一个存储块
};
struct Users* login(struct Users* Uhead)
{struct Users* newUser = (struct Users*)malloc(sizeof(struct Users));struct Users* temp = Uhead;printf("创建您的ID(1-20位):\n");scanf("%s", newUser->ID);printf("请输入您设置的密码(1-20位) :\n");scanf("%s", newUser->passWord);if (temp != NULL){while (temp->next != NULL){temp = temp->next;}temp->next = newUser;temp = temp->next;}else{temp = newUser;Uhead = temp;}newUser->next = NULL;return Uhead;
}
void reg(struct Users* Uhead)
{int a = 0;printf("请输入您的ID :\n");char UID[20];scanf("%s", &UID);struct Users* temp = Uhead;while (temp != NULL){if (strcmp(temp->ID, UID) == 0){a = 1;break;}else{temp = temp->next;}}if (a != 1){printf("该ID还未注册!请先注册!\n");Sleep(1500);int function = Umanu();Uoperate(function);return;}char passWord[20];int flag = 1;while (flag){printf("请输入您的密码 :\n");scanf("%s", passWord);if (strcmp(passWord,temp->passWord)==0){flag = 0;printf("密码正确 !欢迎使用 !\n");Sleep(1000);return;}else{printf("密码错误 !请30秒后重试 !\n");Sleep(30000);}}
}
struct Users* ReadFile(char* filename)
{struct Users* temp = NULL;struct Users* Uhead = temp = (struct Users*)malloc(sizeof(struct Users));;struct Users* newUser = (struct Users*)malloc(sizeof(struct Users));newUser->next = NULL;FILE* fp = fopen(filename, "r");if (fp == NULL){return 0;}fscanf(fp, "%s\t%s\n", temp->ID, temp->passWord);Uhead = temp;temp->next = NULL;while(fscanf(fp,"%s\t%s\n",newUser->ID,newUser->passWord)!=EOF){temp->next = newUser;temp = temp->next;newUser = (struct Users*)malloc(sizeof(struct Users));newUser->next = NULL;}fclose(fp);return Uhead;
}
void destory(struct Users*Uhead)
{char UID[21];printf("请输入您的ID :\n");char chioce[5];scanf("%s", UID);char passWord[21];struct Users* temp = Uhead;while (temp->ID == UID){temp = temp->next;}printf("请输入密码 :\n");scanf("%s", passWord);while (passWord == temp->passWord){printf("请输入您的密码 :\n");scanf("%d", &passWord);if (passWord == temp->passWord){int flag = 1;printf("密码正确 !确定要销毁账号吗 ?(yes/no)\n");while (flag){scanf("%s", chioce);if (chioce == "yes"){flag = 0;struct Users* n = NULL;struct Users* p = Uhead;n = temp->next;while (p->next == temp){p = p->next;}p->next = n;free(temp);return;}else if (chioce == "no"){flag = 0;printf("已取消该操作 !\n");Sleep(5);system("cls");int function = Umanu();Uoperate(function);return;}else{printf("请输入正确操作 !\n");}return;}}else{printf("密码错误 !请30秒后重试 !\n");//			Sleep(30);}}
}
void Uchange(struct Users* head)
{struct Users* temp = head;printf("请输入您的ID :\n");char ID[20];scanf("%s", ID);while (temp != NULL){if (strcmp(ID, temp->ID) == 0){char password[20];while (1){printf("请输入原本的密码 :\n");scanf("%s", password);if (strcmp(password, temp->passWord) == 0){printf("请输入修改之后的密码 :\n");scanf("%s", temp->passWord);break;}else{printf("密码错误!!!输入正确后方可修改!!!\n");Sleep(3000);}}}else{temp = temp->next;}}
}
void writeFile(struct Users* head, char *filename)
{FILE* fp = NULL;fp = fopen(filename, "w+");struct Users* temp = head;while (temp != NULL){fprintf(fp, "%s\t%s\n", temp->ID, temp->passWord);temp = temp->next;}fclose(fp);
}
int Umanu()
{printf("----------------------------------------------------------------------\n");printf("|                       食堂用户菜品管理系统                         |\n");printf("|--------------------------------------------------------------------|\n");printf("|  1.注册新用户                                                      |\n");printf("|  2.登录用户                                                        |\n");printf("|  3.修改账户密码                                                    |\n");printf("----------------------------------------------------------------------\n");int function = 0;printf("请输入指令 :\n");scanf("%d", &function);return function;
}void Uoperate(int function)
{struct Users* Uhead = (struct Users*)malloc(sizeof(struct Users));Uhead->next = NULL;char filename[100] = "D:\\关于学习勇敢的尝试\\食堂用户菜品管理系统\\食堂用户菜品管理系统\\用户资料";Uhead = ReadFile(filename);if (function == 1){Uhead = login(Uhead);printf("注册成功 !欢迎使用 !\n");writeFile(Uhead, filename);Sleep(5);system("cls");return;}else if (function == 2){reg(Uhead);writeFile(Uhead,filename);}else if (function == 3){Uchange(Uhead);writeFile(Uhead, filename);int function = Umanu();Uoperate(function);}else{printf("请输入正确的指令!!!\n");int function = Umanu();Uoperate(function);}
}
void manu()
{printf("----------------------------------------------------------------------\n");printf("|                       食堂用户菜品管理系统                         |\n");printf("|--------------------------------------------------------------------|\n");printf("|  1.导入菜品信息                                                    |\n");printf("|  2.删除菜品信息                                                    |\n");printf("|  3.修改菜品信息                                                    |\n");printf("|  4.打印菜品信息                                                    |\n");printf("|  5.增加菜品信息                                                    |\n");printf("|  6.查找菜品信息                                                    |\n");printf("|  7.评价菜品                                                        |\n");printf("|  8.退出系统                                                        |\n");printf("----------------------------------------------------------------------\n");
}
struct cook
{char name[50];//菜名float price;//价格char met[150];//材料int num = 0;//评价人数float avecom = 0;//平均评价分数struct cook* next;//链表操作
};
void Write(struct cook* head, char* filename)
{FILE* fp = NULL;fp = fopen(filename, "w");struct cook* newUser = (struct cook*)malloc(sizeof(struct cook));struct cook* temp = head;while (temp != NULL){fprintf(fp, "%s\t%f\t%s\t%f\t%d\n", temp->name, temp->price, temp->met, temp->avecom, temp->num);temp = temp->next;}return;
}
void Comment(struct cook* head)
{struct cook* temp = head;struct cook* flag = search(temp);if (flag != NULL){printf("请输入您的评分 :\n");float comment = 0;scanf("%f", &comment);flag->avecom = ((flag->avecom * flag->num) + comment) / (flag->num + 1);flag->num++;printf("评价成功!\n");return;}else{printf("找不到对应菜品!\n");return;}
}
void SearchCook(struct cook* head)
{struct cook* flag = search(head);if (flag != NULL){printf("找到了!\n");print(flag);}else{printf("未能找到对应菜品!\n");}
}
struct cook* search(struct cook* head)
{struct cook* temp = head;char name[50];printf("请输入您要操作的菜名 :\n");scanf("%s", name);int flag = 0;while (temp != NULL){if (strcmp(name, temp->name) == 0){flag = 1;return temp;}else{temp = temp->next;}}if (flag == 0){return NULL;}
}
void Add(struct cook* head)
{struct cook* temp = head;while (temp->next != NULL){temp = temp->next;}struct cook* newCook = (struct cook*)malloc(sizeof(struct cook));printf("请输入您想添加的菜品的具体信息(菜名/价格/材料/综合评分/评价人数) :\n");scanf("%s", newCook->name);scanf("%f", &newCook->price);scanf("%s", newCook->met);scanf("%f", &newCook->avecom);scanf("%d", &newCook->num);temp->next = newCook;newCook->next = NULL;printf("添加成功!\n");
}
void Allprint(struct cook* head)
{struct cook* temp = head;while (temp->next != NULL){print(temp);temp = temp->next;}print(temp);return;
}
void print(struct cook* temp)
{printf("菜名:%s\n", temp->name);printf("价格:%0.2f\n", temp->price);printf("材料:%s\n", temp->met);printf("综合评分:%0.2f\n", temp->avecom);printf("评价人数(%d)\n", temp->num);
}
void Change(struct cook* head)
{struct cook* temp = head;int flag = 0;int function;struct cook* fflag = search(head);if (fflag == NULL){printf("没有对应菜品!!!\n");return;}else{while (1){printf("请输入想修改的内容:(1.菜品名称/2.材料/3.价格)\n");scanf("%d", &function);if (function == 1){printf("请输入新的菜名 :\n");scanf("%s", fflag->name);printf("修改成功!\n");break;}else if (function == 2){printf("请输入新的材料列表 :\n");scanf("%s", fflag->met);printf("修改成功!\n");break;}else if (function == 3){printf("请输入新的价格 :\n");scanf("%f", &fflag->price);printf("修改成功!\n");break;}else{printf("请输入正确的指令!!!\n");Sleep(10000);}}}
}
struct cook* Delete(struct cook* head)
{struct cook* temp = head;struct cook* next = NULL;struct cook* flag = search(head);if (flag != NULL){if (flag == head){head = head->next;return head;}else{while (temp->next != flag){temp = temp->next;}temp->next = flag->next;return head;}}else{printf("未能找到对应菜品!\n");}}
struct cook* Create(struct cook* head)
{struct cook* temp = head;if (head != NULL){while (temp->next != NULL){temp = temp->next;}}struct cook* Next = (struct cook*)malloc(sizeof(cook));Next->next = NULL;printf("请输入你想要录入的数据(菜名/价格/材料/综合评分/评价人数) :\n若想结束,请输入end\n");while (1){scanf("%s", Next->name);if (strcmp(Next->name, "end") == 0){break;}scanf("%f", &Next->price);scanf("%s", Next->met);scanf("%f", &Next->avecom);scanf("%d", &Next->num);if (temp == NULL){temp = Next;head = temp;}else{Next->next = NULL;temp->next = Next;temp = temp->next;}Next= (struct cook*)malloc(sizeof(cook));}return head;
}
struct cook* Read(char* filename)
{struct cook* head = NULL;struct cook* temp = (struct cook*)malloc(sizeof(cook));struct cook* newCook = (struct cook*)malloc(sizeof(struct cook));newCook->next = NULL;FILE* fp = fopen(filename, "r");if (fp == NULL){return NULL;}fscanf(fp, "%s%f%s%f%d", temp->name, &temp->price, temp->met, &temp->avecom, &temp->num);head = temp;temp->next = NULL;while (fscanf(fp, "%s%f%s%f%d", newCook->name, &newCook->price, newCook->met, &newCook->avecom, &newCook->num) != EOF){temp->next = newCook;temp = temp->next;newCook = (struct cook*)malloc(sizeof(struct cook));newCook->next = NULL;}fclose(fp);return head;
}
void operate()
{int fun = 0;printf("请输入指令 :\n");struct cook* Head = NULL;char filename[100]="D:\\关于学习勇敢的尝试\\食堂用户菜品管理系统\\食堂用户菜品管理系统\\菜品资料";struct cook* head = Read(filename);while (scanf("%d", &fun) != EOF){if (fun == 1){head = Create(head);}else if (fun == 2){head = Delete(head);}else if (fun == 3){Change(head);}else if (fun == 4){Allprint(head);}else if (fun == 5){Add(head);}else if (fun == 6){SearchCook(head);}else if (fun == 7){Comment(head);}else if (fun == 8){Write(head,filename);printf("感谢您的使用!\n");return;}else{printf("请输入正确的指令!!!\n");}manu();printf("请输入指令 :\n");}
}
int main()
{int function = Umanu();Uoperate(function);system("cls");manu();operate();
}

        该系统我主要划分为两个大模块,分别就是对于用户的操作和对于菜品的操作,对用户的操作,首先提供void Uoperate(),是用户的操作面板,之后选用if-else if-else对指令的解析和调用函数的选择都在这个操作面板,设计内容为
        1、注册新用户
        2、登录用户
        3、修改账户密码
        对于不同的指令执行不同的操作,菜品模块类似于用户模块,提供void operate()函数,是菜品的操作面板,也是对于指令的解析和选择调用函数
        1、导入菜品信息
        2、删除菜品信息
        3、修改菜品信息
        4、打印菜品信息
        5、增加菜品信息
        6、查找菜品信息
        7、评价菜品
        8、退出系统
        主函数main中主要调用就是Uoperate和operate函数,对指令的读取判定和执行都在这两个函数中,这两个函数返回空类型,只负责执行函数。

        此系统中还有两个结构体用来存储不同信息

struct Users
{char ID[21];//用户的IDchar passWord[21];//用户的密码struct Users* next;//链表操作,指向下一个存储块
};
struct cook
{char name[50];//菜名float price;//价格char met[150];//材料int num = 0;//评价人数float avecom = 0;//平均评价分数struct cook* next;//链表操作
};

        该系统主要用于用户管理,此时在此段代码中一共有两个链表,一个链表用于存储用户信息,另一个链表用于存储菜品信息。此处特地减少了在主函数中的代码,主函数只负责调用四个主要函数,分别为用户操作菜单,用户操作面板,菜品操作菜单和菜品操作面板。

        仍有许多方面可以改善,比如注册用户和登录用户时候密码的保密性欠缺,用户可以直接看到自己输入的密码,但是实际上应该隐藏数字,防止密码泄露。同时对于用户面板的操作比较单一,而且操作过少,应该增加部分功能,比如销毁账户和退出系统。面板颜色也可以更改,但是在如上代码中没有加入相应操作。这些都是可以在之后弥补的点。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部