晋城网站设计人,哪些网站可以做公司制度,如何创建一个网站链接,wordpress数据连接失败1223注意#xff1a;需要提前创建对应的.dat文件 本项目实现了数据的永久存储#xff0c;有用户的注册、登录。 管理员对卡丁车的管理、查看预约用户、修改帐户权限。 用户对个人信息的管理、查看并预约卡丁车、卡丁车维修上报。 维修员对卡丁车的维修状态上报、个人信息管理。
…注意需要提前创建对应的.dat文件 本项目实现了数据的永久存储有用户的注册、登录。 管理员对卡丁车的管理、查看预约用户、修改帐户权限。 用户对个人信息的管理、查看并预约卡丁车、卡丁车维修上报。 维修员对卡丁车的维修状态上报、个人信息管理。
登录信息页面
login.h
//
// Created by SGCNB666 on 2024/12/27.
//#ifndef GO_KARTS_LOGIN_H
#define GO_KARTS_LOGIN_H#include stdio.h
#include stdlib.h
#include string.h// 账户机构提
typedef struct User
{char username[20]; // 用户名char password[20]; // 密码char permission; // 权限
}User;// 用户个人信息
typedef struct UserPerson
{char name[20]; //用户名char phone[15]; //电话int kart_booknot; //预约卡丁车编号
}UserPerson;// 用户链表
typedef struct UserList
{User data; // 用户信息struct UserList *next; // 指向下一个用户
}UserList;// 用户个人信息链表
typedef struct UserPersonList
{UserPerson data; //用户个人信息struct UserPersonList *next; //指向下一个用户个信息
}UserPersonList;/*** 登录验证* */
UserList* user(UserList *head);/*** 注册* */
int enroll_user(UserList **head);/*** 插入用户* */
int init_user_list(UserList **head, User user);/*** 用户信息的添加* */
void add_user_person(UserPersonList **head, UserList *user);/*** 创建用户个人信息* */
int init_user_Person_list(UserPersonList **head, UserPerson *userPerson);/*** 销毁用户列表* */
void destroy_user_list(UserList *head);/*** 销毁用户个人信息列表* */
void destroy_user_person_list(UserPersonList *head);/*** 保存用户列表到文件* */
void save_user_file(UserList *head);/*** 保存用户个人信息列表到文件* */
void save_user_person_file(UserPersonList *head);/*** 从文件加载用户列表* */
void load_user_file(UserList **head);/*** 从文件加载用户个人信息列表* */
void load_user_person_file(UserPersonList **head);/*** 程序欢迎界面* */
void login_welcome();/*** 登录主界面* */
UserList* login(UserList **head);/*** 输出用户列表* */
void print_user_list(UserList *head);#endif //GO_KARTS_LOGIN_H
login.c
#include login.h/*** 登录验证* */
UserList* user(UserList *head)
{UserList *p head; // p指向头节点User user; // 用户信息printf(请输入用户名);scanf(%s, user.username); // 输入用户名printf(请输入密码);scanf(%s, user.password); // 输入密码while(p) // 遍历链表{if(!strcmp(p-data.username, user.username) !strcmp(p-data.password, user.password)) // 用户名和密码都正确{return p;}p p-next; // p指向下一个节点}return NULL;
}/*** 注册* */
int enroll_user(UserList **head)
{User user; // 用户信息UserList *p *head; // p指向头节点int flag 1; // 标志位while(flag) // 循环输入用户名{printf(请输入用户名);scanf(%s, user.username); // 输入用户名while (p){if(!strcmp(p-data.username, user.username)) // 用户名已存在{printf(用户名已存在请重新输入\n);flag 1;break;}flag 0; // 没有找到相同的用户名更改标志位p p-next; // p指向下一个节点}p *head; // p重新指向头节点}printf(请输入密码);scanf(%s, user.password); // 输入密码if(strcmp(user.username, admin)) // 如果是管理员管理员有且仅有admin一个{user.permission A; // 管理员权限}else{user.permission U; // 否则是用户权限}if( init_user_list(head, user) ) // 插入用户{return -1;}return 0;
}/*** 插入用户* */
int init_user_list(UserList **head, User user)
{UserList *pNew (UserList *)malloc(sizeof (UserList)); // 分配内存UserList *p *head; // p指向头节点if(!pNew) // 分配内存失败{perror(内存分配失败);return -1;}if(*head ! NULL) // 链表不为空{while(p-next) // 遍历链表{p p-next; // p指向下一个节点}p-next pNew; // p指向新节点pNew-data user; // 插入用户信息pNew-next NULL; // 新节点的next指向NULLreturn 0;}pNew-next NULL; // 新节点的next指向NULLpNew-data user; // 插入用户信息*head pNew; // 头节点指向新节点return 0;
}/*** 用户信息的添加* */
void add_user_person(UserPersonList **head, UserList *user)
{UserPersonList *p *head; // p指向头节点while(p) // 遍历链表{if(!strcmp(p-data.name, user-data.username)) // 找到相同的用户名{return;}p p-next; // p指向下一个节点}UserPerson userPerson; // 用户个人信息printf(您是第一次登录请完善个人信息\n);strcpy(userPerson.name ,user-data.username); // 用户名userPerson.kart_booknot 0; // 默认没有预约默认为01表示已经被预约printf(请输入您的手机号);scanf(%s, userPerson.phone); // 手机号while (getchar()! \n);init_user_Person_list(head, userPerson); // 插入用户个人信息return;
}/*** 创建用户个人信息* */
int init_user_Person_list(UserPersonList **head, UserPerson *userPerson)
{UserPersonList *pNew (UserPersonList *)malloc(sizeof (UserPersonList)); // 分配内存UserPersonList *p *head; // p指向头节点if(!pNew) // 分配内存失败{perror(内存分配失败);return -1;}if(*head ! NULL) // 链表不为空{while(p-next) // 遍历链表{p p-next; // p指向下一个节点}p-next pNew; // p指向新节点pNew-data *userPerson; // 插入用户个人信息pNew-next NULL; // 新节点的next指向NULLreturn 0;}pNew-next NULL; // 新节点的next指向NULLpNew-data *userPerson; // 插入用户个人信息*head pNew; // 头节点指向新节点return 0;
}/*** 销毁用户列表* */
void destroy_user_list(UserList *head)
{UserList *p head, *q NULL; // p指向头节点q指向p的前一个节点while(p) // 遍历链表指针尾随{q p; // q指向pp p-next; // p指向下一个节点free(q); // 释放q}
}/*** 销毁用户个人信息列表* */
void destroy_user_person_list(UserPersonList *head)
{UserPersonList *p head, *q NULL; // p指向头节点q指向p的前一个节点while(p) // 遍历链表指针尾随{q p; // q指向pp p-next; // p指向下一个节点free(q); // 释放q}
}/*** 保存用户列表到文件* */
void save_user_file(UserList *head)
{FILE *fp; // 文件指针fp fopen(login_user.dat, wb); // 以二进制方式打开文件if(!fp) // 文件打开失败{perror(文件打开失败);return;}UserList *p head; // p指向头节点while(p) // 遍历链表{fwrite((p-data), sizeof(User), 1, fp); // 写入文件每次写入一个用户信息p p-next; // p指向下一个节点}printf(保存成功\n);fclose(fp); // 关闭文件
}/*** 保存用户个人信息列表到文件* */
void save_user_person_file(UserPersonList *head)
{FILE *fp; // 文件指针fp fopen(person_info.dat, wb); // 以二进制方式打开文件if(!fp) // 文件打开失败{perror(文件打开失败);return;}UserPersonList *p head; // p指向头节点while(p) // 遍历链表{fwrite((p-data), sizeof(UserPerson), 1, fp); // 写入文件每次写入一个用户信息p p-next; // p指向下一个节点}printf(保存成功\n);fclose(fp); // 关闭文件
}/*** 从文件加载用户列表* */
void load_user_file(UserList **head)
{FILE *fp; // 文件指针fp fopen(login_user.dat, rb); // 以二进制方式打开文件if(!fp) // 文件打开失败{perror(文件打开失败);return;}User user; // 用户信息while(fread(user, sizeof (User), 1, fp) 1 ) // 读取文件每次读取一个用户信息{init_user_list(head, user); // 读取用户列表}fclose(fp); // 关闭文件
}/*** 从文件加载用户个人信息列表* */
void load_user_person_file(UserPersonList **head)
{FILE *fp; // 文件指针fp fopen(person_info.dat, rb); // 以二进制方式打开文件if(!fp){perror(文件打开失败);return;}UserPerson userPerson1; // 用户信息while(fread(userPerson1, sizeof (UserPerson), 1, fp) 1 ) // 读取文件每次读取一个用户信息{init_user_Person_list( head,userPerson1); // 读取用户列表}fclose(fp); // 关闭文件
}/*** 程序欢迎界面* */
void login_welcome()
{system(clear); // 清屏printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ ┃\n);printf(┃ 欢迎进入卡丁车管理系统有系统 ┃\n);printf(┃ ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(按任意键继续...\n);getchar();
}/*** 登录主界面* */
UserList* login(UserList **head)
{printf(登录页面\n);UserList* p NULL; // p指向头节点char ch;while(1){system(clear); // 清屏printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.登录 2.注册 3.退出 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);switch (ch){case 1:p user(*head);if( p ){printf(登录成功!\n);return p;}else{printf(密码错误登录失败!\n);}break;case 2:enroll_user(head);break;case 3:{return NULL;}break;case 4:print_user_list(*head);break;default:printf(输入错误请重新输入\n);break;}while (getchar() ! \n);printf(按任意键继续...\n);getchar();}
}/*** 打印用户列表* */
void print_user_list(UserList *head)
{UserList *p head;while(p){printf(用户名%s\n, p-data.username);printf(密码%s\n, p-data.password);printf(权限%c\n, p-data.permission);p p-next;}
}
登录后页面
home_face.h
//
// Created by SGCNB666 on 2024/12/31.
//#ifndef GO_KARTS_HOME_FACE_H
#define GO_KARTS_HOME_FACE_H#include stdio.h
#include login.h
#include user.h
#include admin.h
#include repair.h/*** 显示管理员主页面*/
void admin_home(UserPersonList* head_person,KartNode** head, UserList* head_user);/*** 显示用户主页面*/
void user_home(UserPersonList* head_person,KartNode* head_kart,UserList *user_List);/*** 显示维修员主页面*/
void repair_home(UserPersonList* head_person,KartNode* head_kart,UserList *user_List);/*** 卡丁车信息界面* */
void karts_info(KartNode** head);/*** 权限管理页面* */
void user_info(UserList* head);/*** 卡丁车预约界面* */
void katrs_book(UserPerson* head_person,KartNode* head_kart);/*** 个人信息管理界面* */
void user_person(UserPerson* userPerson, UserList* user_List);/*** 卡丁车报修界面* */
void karts_repair(KartNode* head_kart);/*** 修改密码* */
void change_password(UserList* user);#endif //GO_KARTS_HOME_FACE_H
home_face.c
//
// Created by SGCNB666 on 2024/12/31.
//#include home_face.h/*** 显示管理员主界面* */
void admin_home(UserPersonList* head_person,KartNode** head_kart, UserList* head_user)
{while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(管理员主页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.卡丁车信息管理 3.权限管理 4.删除用户 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);switch (ch){case 1:save_user_person_file(head_person);save_user_file(head_user);return;break;case 2:karts_info( head_kart);break;case 3:user_info(head_user);break;case 4:delete_User(head_user, head_person);break;default:printf(输入错误请重新输入\n);break;}while (getchar() ! \n);printf(按任意键继续...\n);getchar();}}/*** 显示用户主页面*/
void user_home(UserPersonList* head_person,KartNode* head_kart,UserList *user_List)
{while (getchar() ! \n);UserPersonList *p head_person;KartNode *p_kart head_kart;while(p){if(strcmp(p-data.name,user_List-data.username)0){break;}p p-next;}UserPerson *userPerson (p-data);while(1){system(clear); // 清屏char ch;while (getchar()! \n);printf(用户主页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.卡丁车预约管理 3.个人信息管理 ┃\n);printf(┃ 4.卡丁车报修 5.卡丁车信息查询 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);switch (ch){case 1:user_kart_booknot_save(head_person,head_kart);return;break;case 2:katrs_book(p-data,p_kart);break;case 3:user_person(p-data,user_List);break;case 4:user_kart_repair(p-data,p_kart);break;case 5:print_Kart_list(p_kart);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar()! \n);getchar();}}/*** 显示维修员主页面*/
void repair_home(UserPersonList* head_person,KartNode* head_kart,UserList *user_List)
{while (getchar() ! \n);UserPersonList *p head_person;KartNode *p_kart head_kart;while(p){if(strcmp(p-data.name,user_List-data.username)0){break;}p p-next;}UserPerson *userPerson (p-data);while (1){system(clear); // 清屏char ch;printf(维修员主页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.卡丁车报修管理 3.个人信息管理 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);switch (ch){case 1:user_kart_booknot_save(head_person,head_kart);return;break;case 2:karts_repair(head_kart);break;case 3:user_person(p-data,user_List);break;default:printf(输入错误请重新输入\n);break;}}}
/*** 卡丁车信息界面* */
void karts_info(KartNode** head)
{load_Kart_file(head);while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(卡丁车信息管理页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.保存退出 2.增加卡丁车信息 3.删除卡丁车信息 ┃\n);printf(┃ 4.修改卡丁车信息 5.查询卡丁车信息 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);switch (ch){case 1:save_Kart_file(*head);return;break;case 2:enroll_Kart(head);break;case 3:delete_Kart(head);break;case 4:modify_Kart(*head);break;case 5:print_Kart_list(*head);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar() ! \n);getchar();}
}/*** 权限管理页面* */
void user_info(UserList* head)
{while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(权限身份管理页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.保存退出 2.修改用户权限身份标识 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);while (getchar() ! \n);switch (ch){case 1:save_user_file(head);return;break;case 2:revise_User_perm(head);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar() ! \n);}
}/*** 卡丁车预约界面* */
void katrs_book(UserPerson* userPerson,KartNode* head_kart)
{while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(预约管理页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.卡丁车预约 3.卡丁车预约取消 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);while (getchar() ! \n);switch (ch){case 1:return;break;case 2:user_kart_booknot(userPerson,head_kart);break;case 3:user_kart_booknot_cancel(userPerson,head_kart);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar() ! \n);}
}/*** 个人信息管理界面* */
void user_person(UserPerson* userPerson, UserList* user_List)
{while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(个人信管理页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.查看个人信息 3.修改个人信息 4.修改密码 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);while (getchar() ! \n);switch (ch){case 1:save_user_file(user_List);return;break;case 2:if(user_List-data.permission R){print_repair_info(userPerson);}else{print_user_info(userPerson);}break;case 3:revise_user_info(userPerson);break;case 4:change_password(user_List);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar() ! \n);}
}/*** 卡丁车报修界面* */
void karts_repair(KartNode* head_kart)
{while(1){system(clear); // 清屏char ch;while (getchar() ! \n);printf(卡丁车报修管理页面\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.退出 2.查看待报修卡丁车 3.上报维修完成或无法维修进行报废处理 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);printf(请选择);scanf(%c, ch);while (getchar() ! \n);switch (ch){case 1:save_Kart_file(head_kart);return;break;case 2:repair_karts_info(head_kart);break;case 3:report_repair_info(head_kart);break;default:printf(输入错误请重新输入\n);break;}printf(按任意键继续...\n);while (getchar() ! \n);}
}/*** 修改密码* */
void change_password(UserList* user)
{printf(请输入新密码);scanf(%s,user-data.password);return;
}管理员功能页面
admin.h
//
// Created by SGCNB666 on 2024/12/31.
//#ifndef GO_KARTS_ADMIN_H
#define GO_KARTS_ADMIN_H
#include stdio.h
#include stdlib.h
#include login.h// 赛车结构体
typedef struct Kart
{int kart_id; // 赛车编号char repair_not; // 是否需要维修char kart_name[20]; // 赛车名称char kart_type[20]; // 赛车类型char kart_color[20]; // 赛车颜色char book_not; // 是否被预定char user_name[20]; // 预定用户
}Kart;// 卡丁车链表
typedef struct KartNode
{Kart data;struct KartNode *next;
}KartNode;/*** 添加卡丁车信息* */
void enroll_Kart(KartNode **head);
/*** 添加卡丁车节点* */
void init_Kart_List(KartNode **head, Kart data);/*** 销毁卡丁车列表* */
void destroy_Kart_list(KartNode *head);/*** 保存卡丁车列表到文件* */
void save_Kart_file(KartNode *head);/*** 从文件加载卡丁车列表* */
void load_Kart_file(KartNode **head);/*** 查询卡丁车列表* */
void print_Kart_list(KartNode *head);/*** 删除卡丁车* */
void delete_Kart(KartNode **head);/*** 修改卡丁车信息* */
void modify_Kart(KartNode *head);/*** 修改用户权限身份* */
void revise_User_perm(UserList *head);/*** 删除用户* */
void delete_User(UserList **head, UserPersonList **head_person);/*** 删除用户信息* */
void delete_User_Person(UserList *head, UserPersonList **head_person);#endif //GO_KARTS_ADMIN_H
admin.c
//
// Created by SGCNB666 on 2024/12/31.
//#include admin.h/*** 添加卡丁车信息* */
void enroll_Kart(KartNode **head)
{int id; // 生成卡丁车编号KartNode *p *head; // p指向头节点if(!p) // 链表为空{id 1001;}else{while(p){id p-data.kart_id 1; // 生成卡丁车编号p p-next; // p指向下一个节点}}Kart new_kart;new_kart.kart_id id; // 生成卡丁车编号new_kart.repair_not 0; // 初始化是否维修默认不需要维修new_kart.book_not 0; // 初始化是否预约默认不需要预约new_kart.user_name[0] \0; // 初始化预约人为空printf(添加编号为%d的车辆信息\n, id);printf(请输入卡丁车名称);scanf(%s, new_kart.kart_name); // 输入卡丁车名称printf(请输入卡丁车类型);scanf(%s, new_kart.kart_type); // 输入卡丁车类型printf(请输入卡丁车颜色);scanf(%s, new_kart.kart_color); // 输入卡丁车颜色init_Kart_List(head, new_kart);
}/*** 添加卡丁车节点* */
void init_Kart_List(KartNode **head, Kart data)
{KartNode *pNew (KartNode *)malloc(sizeof(KartNode)); // 分配内存if(!pNew) // 分配内存失败{perror(内存分配失败\n);return;}KartNode *p *head; // p指向头节点if(*head ! NULL) // 链表不为空{while(p-next) // 找到链表的尾节点{p p-next; // p指向下一个节点}p-next pNew; // 尾节点指向新节点pNew-data data; // 新节点数据赋值pNew-next NULL; // 新节点指向空return;}pNew-next NULL; // 新节点指向空pNew-data data; // 新节点数据赋值*head pNew; // 头节点指向新节点return;
}/*** 销毁卡丁车列表* */
void destroy_Kart_list(KartNode *head)
{KartNode *p head, *q NULL; // p指向头节点q指向尾节点while(p) // 遍历链表{q p; // q指向pp p-next; // p指向下一个节点free(q); // 释放内存}
}/*** 保存卡丁车列表到文件* */
void save_Kart_file(KartNode *head)
{FILE *fp fopen(karts_info.dat, wb); // 以二进制方式打开文件if(!fp) // 打开文件失败{perror(文件打开失败);return;}KartNode *p head; // p指向头节点while(p) // 遍历链表{fwrite( p-data, sizeof (Kart), 1, fp); // 写入文件p p-next;}printf(保存成功\n);fclose(fp); // 关闭文件return;
}/*** 从文件加载卡丁车列表* */
void load_Kart_file(KartNode **head)
{FILE *fp fopen(karts_info.dat, rb); // 以二进制方式打开文件if(!fp) // 打开文件失败{perror(文件打开失败);return;}Kart data; // 卡丁车信息while(fread(data, sizeof (Kart), 1, fp)) // 读取文件{init_Kart_List(head, data); // 添加卡丁车节点}fclose(fp); // 关闭文件
}/*** 查询卡丁车列表* */
void print_Kart_list(KartNode *head)
{KartNode *p head; // p指向头节点if(!p){printf(卡丁车列表为空\n);return;}printf(卡丁车编号\t卡丁车名称\t卡丁车类型\t卡丁车颜色\t是否维修或报废\t是否预约\t预约人\n);while(p) // 遍历链表{printf(%d\t\t, p-data.kart_id);printf(%s\t\t, p-data.kart_name);printf(%s\t\t, p-data.kart_type);printf(%s\t\t, p-data.kart_color);if(p-data.repair_not 0){printf(%c(无损坏)\t, p-data.repair_not);}else if(p-data.repair_not 1){printf(%c(报修中)\t, p-data.repair_not);}else{printf(%c(已报废)\t, p-data.repair_not);}printf(%c\t\t, p-data.book_not);printf(%s\t\t\n, p-data.user_name);p p-next; // p指向下一个节点}
}/*** 删除卡丁车* */
void delete_Kart(KartNode **head)
{KartNode *p *head; // p指向头节点if(!p) // 链表为空{printf(卡丁车列表为空\n);}int id;printf(请输入要删除的卡丁车编号);scanf(%d, id); // 输入卡丁车编号KartNode *q NULL; // q置空while(p) // 遍历链表指针尾随{ if(id p-data.kart_id){if(p *head) // 要删除的是头节点{*head p-next; // 头节点后移free(p); // 释放内存return;}else{q-next p-next; // 前一个节点指向后一个节点free(p); // 释放内存return;}}q p; // q指向pp p-next; // p指向下一个节点}printf(卡丁车编号不存在\n);return;
}/*** 修改卡丁车信息* */
void modify_Kart(KartNode *head)
{KartNode *p head, *q NULL; // p指向头节点q指向尾节点if(!p) // 链表为空{printf(卡丁车列表为空\n);}int id; // 卡丁车编号printf(请输入要修改的卡丁车编号);scanf(%d, id); // 输入卡丁车编号while(p) // 遍历链表{if(id p-data.kart_id) // 找到了要修改的卡丁车{while(1) // 循环修改卡丁车信息{printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃ 1.全部修改 2.是否维修 3.卡丁车名称 ┃\n);printf(┃ 4.卡丁车类型 5.卡丁车颜色 6.预约用户名 ┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);while(getchar() ! \n); // 清空缓冲区printf(请选择\n);char ch;scanf(%c, ch); // 输入选择while(getchar() ! \n); // 清空缓冲区switch(ch){case 1:printf(请输入卡丁车名称);scanf(%s, p-data.kart_name);printf(请输入卡丁车类型);scanf(%s, p-data.kart_type);printf(请输入卡丁车颜色);scanf(%s, p-data.kart_color);while(getchar() ! \n);printf(请输入是否维修);scanf(%c, p-data.repair_not);while(getchar() ! \n);printf(请输入预约用户名);scanf(%s, p-data.user_name);p-data.book_not 1;while(getchar() ! \n);return;break;case 2:printf(请输入是否维修);scanf(%c, p-data.repair_not);while(getchar() ! \n);return;break;case 3:printf(请输入卡丁车名称);scanf(%s, p-data.kart_name);while(getchar() ! \n);return;break;case 4:printf(请输入卡丁车类型);scanf(%s, p-data.kart_type);while(getchar() ! \n);return;break;case 5:printf(请输入卡丁车颜色);scanf(%s, p-data.kart_color);while(getchar() ! \n);return;break;case 6:printf(请输入预约用户名);scanf(%s, p-data.user_name);p-data.book_not 1;while(getchar() ! \n);return;break;default:printf(不存在该选项请重新输入\n);}printf(按回车健继续...);getchar();}}q p; // q指向pp p-next; // p指向下一个节点}printf(卡丁车编号不存在\n);return;
}/*** 修改用户权限身份* */
void revise_User_perm(UserList *head)
{UserList *p head; // p指向头节点if(!p) // 链表为空{printf(用户列表为空\n);return;}char username[20]; // 用户名printf(请输入要修改权限的用户名);scanf(%s, username); // 输入用户名while(getchar() ! \n);if(strcmp(username, admin) 0) // 要修改的是admin用户{printf(admin用户是管理员不能修改权限\n);return;}while(p) // 遍历链表{if(strcmp(username, p-data.username) 0) // 找到了要修改的用户{printf(开始修改用户权限(A是普通用户,R是维修员)\n);scanf(%c, p-data.permission);printf(修改成功\n);printf(%s, %s, %c\n, p-data.username, p-data.password, p-data.permission);return;}p p-next; // p指向下一个节点}printf(用户不存在\n);return;
}/*** 删除用户* */
void delete_User(UserList **head, UserPersonList **head_person)
{printf(请输入想要删除的用户名\n);char username[20];scanf(%s, username);while(getchar()! \n);UserList *p *head;if(strcmp(username, admin) 0) // 要删除的是admin用户{printf(admin用户是管理员不能删除\n);return;}if(!p) // 链表为空{printf(用户列表为空\n);return;}if(strcmp(username, p-data.username) 0) // 要删除的是头节点{delete_User_Person(*head, head_person); // 删除用户信息*head p-next; // 头节点后移free(p); // 释放内存return;}UserList *q NULL;while(p) // 遍历链表{if(strcmp(username, p-data.username) 0) // 找到了要删除的用户{ delete_User_Person(*head, head_person); // 删除用户信息q-next p-next; // 前一个节点指向后一个节点free(p); // 释放内存return;}q p; // q指向pp p-next; // p指向下一个节点}printf(该用户不存在\n);return;
}/*** 删除用户信息* */
void delete_User_Person(UserList *user, UserPersonList **head_person)
{UserList *p_user user; // p_user指向头节点UserPersonList *p_person *head_person; // p_person指向头节点if(strcmp(p_user-data.username,p_person-data.name) 0) // 要删除的是头节点{*head_person p_person-next; // 头节点后移free(p_person); // 释放内存return;}UserPersonList *q_person NULL; // q_person指向尾节点while(p_person) // 遍历链表{if(strcmp(p_user-data.username,p_person-data.name) 0) // 找到了要删除的用户{q_person-next p_person-next; // 前一个节点指向后一个节点free(p_person); // 释放内存return;}q_person p_person; // q_person指向p_personp_person p_person-next; // p_person指向下一个节点}printf(该用户不存在\n);return;
}用户功能页面
user.h
//
// Created by SGCNB666 on 2024/12/31.
//#ifndef GO_KARTS_USER_H
#define GO_KARTS_USER_H#include admin.h
#include login.h/*** 卡丁车预约* */
void user_kart_booknot(UserPerson *userPerson,KartNode *kart);/*** 卡丁车查询* */
void user_kart_booknot_query(KartNode *kart);/*** 卡丁车预约取消* */
void user_kart_booknot_cancel(UserPerson *userPerson,KartNode *kart);/*** 卡丁车预约信息保存* */
void user_kart_booknot_save(UserPersonList *head,KartNode *kart);/*** 卡丁车预约信息加载* */
void user_kart_booknot_load(UserPersonList **head);/*** 卡丁车报修* */
void user_kart_repair(UserPerson *userPerson,KartNode *kart);/*** 个人信息查询* */
void print_user_info(UserPerson *userPerson);/*** 个人信息修改* */
void revise_user_info(UserPerson *userPerson);#endif //GO_KARTS_USER_H
user.c
//
// Created by SGCNB666 on 2024/12/31.
//#include user.h/*** 卡丁车预约* */
void user_kart_booknot(UserPerson *userPerson,KartNode *kart)
{KartNode *p kart; // p指向头节点while(p) // 遍历链表{if(!strcmp(userPerson-name,p-data.user_name)) // 判断是否预约过{printf(您已经预约了卡丁车\n);return;}p p-next; // p指向下一个节点}p kart; // p重新指向头节点print_Kart_list(p); // 打印卡丁车列表printf(请输入要预约的卡丁车编号);int num; // 输入的编号scanf(%d, num); // 输入编号while(getchar() ! \n);while(p) // 遍历链表{if(p-data.kart_id num) // 找到了{p-data.book_not 1; // 预约成功userPerson-kart_booknot num; // 修改用户个人信息strcpy(p-data.user_name ,userPerson-name); // 修改车辆信息printf(预约成功\n);return;}p p-next;}printf(查询不到该编号的卡丁车\n);return;
}/*** 卡丁车预约查询* */
void user_kart_booknot_query(KartNode *kart)
{KartNode *p kart; // p指向头节点print_Kart_list(kart); // 打印卡丁车列表
}/*** 卡丁车预约取消* */
void user_kart_booknot_cancel(UserPerson *userPerson,KartNode *kart)
{KartNode *p kart; // p指向头节点print_Kart_list(p); // 打印卡丁车列表printf(请输取消预约的卡丁车编号);int num; // 输入的编号scanf(%d, num);while(getchar() ! \n); // 清空缓冲区while(p) // 遍历链表{ if(p-data.kart_id num) // 找到了{p-data.book_not 0; // 取消预约成功userPerson-kart_booknot 0; // 修改用户个人信息strcpy(p-data.user_name ,); // 修改车辆信息printf(取消预约成功\n); return;}p p-next; // p指向下一个节点}printf(查询不到该编号的卡丁车\n);return;
}/*** 卡丁车预约信息保存* */
void user_kart_booknot_save(UserPersonList *head,KartNode *kart)
{save_user_person_file(head); // 保存用户个人信息列表到文件save_Kart_file(kart); // 保存卡丁车列表到文件
}/*** 卡丁车预约信息加载* */
void user_kart_booknot_load(UserPersonList **head)
{load_user_person_file(head); // 加载用户个人信息列表
}/*** 卡丁车报修* */
void user_kart_repair(UserPerson *userPerson,KartNode *kart)
{KartNode *p kart; // p指向头节点print_Kart_list(p); // 打印卡丁车列表printf(请输入要报修的卡丁车编号);int num; // 输入的编号scanf(%d, num); // 输入编号while(getchar() ! \n);while(p) // 遍历链表{if(p-data.kart_id num) // 找到了{p-data.repair_not 1; // 报修成功printf(报修成功\n);return;}p p-next; // p指向下一个节点}printf(查询不到该编号的卡丁车\n);return;
}/*** 个人信息查询* */
void print_user_info(UserPerson *userPerson)
{printf(个人信息如下\n);printf(用户名%s\n, userPerson-name);printf(手机号%s\n, userPerson-phone);printf(预约卡丁车编号%d\n, userPerson-kart_booknot);return;
}/*** 个人信息修改* */
void revise_user_info(UserPerson *userPerson)
{printf(请输入新的手机号);scanf(%s, userPerson-phone); // 输入新的手机号while(getchar()! \n);return;
}
维修员功能实现
repair.h
//
// Created by SGCNB666 on 2024/12/31.
//#ifndef GO_KARTS_REPAIR_H
#define GO_KARTS_REPAIR_H#include admin.h
#include user.h
#include login.h/*** 显示维修员信息* */
void print_repair_info(UserPerson *userPerson);/*** 显示待维修的车辆信息* */
void repair_karts_info(KartNode *head);/*** 上报维修情况* */
void report_repair_info(KartNode *head);#endif //GO_KARTS_REPAIR_H
repair.c
//
// Created by SGCNB666 on 2024/12/31.
//#include repair.h/*** 显示维修员信息* */
void print_repair_info(UserPerson *userPerson)
{printf(个人信息如下\n);printf(用户名%s\n, userPerson-name);printf(手机号%s\n, userPerson-phone);return;
}/*** 显示待维修的车辆信息* */
void repair_karts_info(KartNode *head)
{KartNode *p head; // p指向头节点if(!p) // 如果链表为空{printf(卡丁车列表为空\n);return;}while(p) // 遍历链表{if (p-data.repair_not 1) // 如果需要维修{printf(编号%d\t\t, p-data.kart_id);printf(名称%s\t\t, p-data.kart_name);printf(类型%s\t\t, p-data.kart_type);printf(颜色%s\t\n, p-data.kart_color);}p p-next; // p指向下一个节点}
}/*** 上报维修情况* */
void report_repair_info(KartNode *head)
{KartNode *p head; // p指向头节点if(!p) // 如果链表为空{printf(卡丁车列表为空\n);return;}printf(请输入你想上报的卡丁车编号);int id; // 输入的编号scanf(%d, id); // 输入编号while(getchar() ! \n);while(p) // 遍历链表{if(id p-data.kart_id) // 找到了{while(getchar()! \n);printf(请输入维修情况(1报废无法维修2维修完成));char ch;scanf(%c, ch); // 输入维修情况if(ch 1){p-data.repair_not 3;printf(维修完成\n);}else if(ch 2){p-data.repair_not 0;printf(维修完成\n);}else{printf(不存在该选项\n);}return;}p p-next; // p指向下一个节点}printf(卡丁车编号不存在\n);return;
}主函数main.c
/************************************************************************* File Name: main.c Author: sgc Description: 卡丁车管理系统 Created Time: 2024年12月30日 星期一 17时53分14秒************************************************************************/#include stdio.h
#include login.h
#include home_face.h
#include admin.hint main(int argc,char *argv[])
{UserList *head_user NULL;KartNode *head_kart NULL;UserPersonList *head_person NULL;load_user_file(head_user); // 加载用户列表login_welcome(); // 显示欢迎界面UserList *p NULL;p login(head_user); // 登录主界面if(!p) // 判断是否是正常登录{save_user_file(head_user);return 0;}save_user_file(head_user); // 保存用户列表到文件// 显示管理员主界面if(p-data.permission U) // 管理员{load_user_person_file(head_person); // 加载用户个人信息列表save_user_person_file(head_person); // 保存用户个人信息列表到文件admin_home( head_person,head_kart,head_user); // 管理员主界面}else if(p-data.permission A) // 普通用户{load_user_person_file(head_person); // 加载用户个人信息列表add_user_person(head_person, p); // 添加用户个人信息save_user_person_file(head_person); // 保存用户个人信息列表到文件load_Kart_file(head_kart); // 加载卡丁车列表user_home(head_person,head_kart,p); // 用户主界面}else if(p-data.permission R) // 维修员{load_user_person_file(head_person); // 加载用户个人信息列表add_user_person(head_person, p); // 添加用户个人信息save_user_person_file(head_person); // 保存用户个人信息列表到文件load_Kart_file(head_kart); // 加载卡丁车列表repair_home(head_person,head_kart,p); // 维修员主界面}else // 其他{printf(权限错误请联系管理员进行修改\n);}destroy_user_list(head_user); // 销毁用户列表destroy_user_person_list(head_person); // 销毁用户个人信息列表destroy_Kart_list(head_kart); // 销毁卡丁车列表return 0;
}