第一个完全自己做的实验:
内容功能

问题:
布局未调整好,未进行完整测试可能存在bug,未加入输入判别机制,未优化代码,复制粘贴冗余多。如果有bug,请留言反馈,谢谢!
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include<conio.h>
#define MaxAssistantNumber 10
#define MaxOrderNumber 20
typedef struct User
{
char UserID[20];
char password[12];
int UserFlag;
}User;
typedef struct Order_Info
{
char OIname[10];
char OItell[11];
char OIdate[20];
char OItime[20];
int OImember;
long int OIid;
char OIplaceNo[2];
}OI;
User UserAdministrator = {"Administrator","root",-1};
User UserOwner = {"Owner","123456",0};
User UserAssistant[MaxAssistantNumber];
int Number_Of_Assistant = 0;
OI Order_Info[MaxOrderNumber];
int Number_Of_Order = 0;
int LoginStatus = 0;
void init_sys();
int Login();
void Logout();
void Restore();
int Menu();
void AdministratorMenu();
void OwnerMenu();
void AssistantMenu();
void Modify_Owner();
void Add_Assistant();
void Delete_Assistant();
void Modify_Assistant();
void Find_Assistant();
void Add_Order();
void Delete_Order();
void Modify_Order();
void Find_AllOrder();
void Find_Order();
void Modify_OrderTime(int index);
void Modify_OrderPlaceNo(int index);
void Modify_OrderMember(int index);
long int TimeStrToInt(char *str);
int main()
{
int i = 1;
while(i){
init_sys();
i = Menu();
}
return 0;
}
void init_sys(){
FILE *fp;
if((fp=fopen("Owner.txt","r+"))==NULL)
{
printf("店主信息为默认信息...\n");
}else{
fscanf(fp,"%s %s", UserOwner.UserID, UserOwner.password);
fclose(fp);
}
if((fp=fopen("AssistantNumber.txt","r+"))==NULL)
{
printf("店员数量为0...\n");
}else{
fscanf(fp,"%d", &Number_Of_Assistant);
fclose(fp);
if((fp=fopen("Assistant.txt","r+"))==NULL)
{
printf("店员信息文件读取失败或不存在,店员数量归零...\n");
remove("AssistantNumber.txt");
}else{
for(int i = 0; i < Number_Of_Assistant; i++){
fscanf(fp,"%s %s\n", UserAssistant[i].UserID, UserAssistant[i].password);
}
fclose(fp);
}
}
if((fp=fopen("OrderNumber.txt","r+"))==NULL)
{
printf("预订数量为0...\n");
}else{
fscanf(fp,"%d", &Number_Of_Order);
fclose(fp);
if((fp=fopen("OrderInfo.txt","r+"))==NULL)
{
printf("预订信息文件读取失败或不存在,预订数量归零...\n");
remove("OrderNumber.txt");
}else{
for(int i = 0; i < Number_Of_Order; i++){
fscanf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, &Order_Info[i].OImember, &Order_Info[i].OIid, Order_Info[i].OIplaceNo);
}
fclose(fp);
}
}
}
int Menu(){
while(1){
system("cls");
printf("\t********************************\n");
printf("\t* *\n");
printf("\t* 1. 用户登录 *\n");
printf("\t* *\n");
printf("\t* ESC. 退出系统 *\n");
printf("\t* *\n");
printf("\t********************************\n");
switch(getch()){
case 49: LoginStatus = Login();break;
case 27: printf(" 系统退出成功.\n");return 0;
}
if(LoginStatus == 1){
AdministratorMenu();
}else if(LoginStatus == 2){
OwnerMenu();
}else if(LoginStatus == 3){
AssistantMenu();
}else if(LoginStatus == -1){
printf(" 系统退出成功.\n");
return 0;
}
}
}
void AdministratorMenu(){
while(1){
system("cls");
printf("\t********************************\n");
printf("\t* *\n");
printf("\t* 1. 修改店主信息 *\n");
printf("\t* *\n");
printf("\t* 2. 修改店员信息 *\n");
printf("\t* *\n");
printf("\t* 3. 还原系统信息 *\n");
printf("\t* *\n");
printf("\t* ESC. 退出登录 *\n");
printf("\t* *\n");
printf("\t********************************\n");
switch(getch()){
case 49: Modify_Owner();break;
case 50: Modify_Assistant();break;
case 51: Restore();return;
case 27: Logout();return;
}
}
}
void OwnerMenu(){
while(1){
system("cls");
printf("\t********************************\n");
printf("\t* *\n");
printf("\t* 1. 添加前台用户 *\n");
printf("\t* *\n");
printf("\t* 2. 删除前台用户 *\n");
printf("\t* *\n");
printf("\t* 3. 修改前台用户信息 *\n");
printf("\t* *\n");
printf("\t* 4. 查看所有前台信息 *\n");
printf("\t* *\n");
printf("\t* 5. 查询所有预订信息 *\n");
printf("\t* *\n");
printf("\t* ESC. 退出登录 *\n");
printf("\t* *\n");
printf("\t********************************\n");
switch(getch()){
case 49: Add_Assistant();break;
case 50: Delete_Assistant();break;
case 51: Modify_Assistant();break;
case 52: Find_Assistant();break;
case 53: Find_AllOrder();break;
case 27: Logout();return;
}
}
}
void AssistantMenu(){
while(1){
system("cls");
printf("\t********************************\n");
printf("\t* *\n");
printf("\t* 1. 添加新预订 *\n");
printf("\t* *\n");
printf("\t* 2. 取消预订 *\n");
printf("\t* *\n");
printf("\t* 3. 修改预订信息 *\n");
printf("\t* *\n");
printf("\t* 4. 查询预订信息 *\n");
printf("\t* *\n");
printf("\t* ESC. 退出登录 *\n");
printf("\t* *\n");
printf("\t********************************\n");
switch(getch()){
case 49: Add_Order();break;
case 50: Delete_Order();break;
case 51: Modify_Order();break;
case 52: Find_Order();break;
case 27: Logout();return;
}
}
}
int Login(){
char _UserID[20];
char _password[12];
int count = 6;
system("cls");
printf("\t********************************\n");
printf("\t* 用户登录 *\n");
printf("\t********************************\n");
while(1){
if(count == 6){
printf(" 用户ID :");
scanf("%s",_UserID);
printf(" 密码 :");
scanf("%s",_password);
count--;
}else if(count == 0){
printf(" 错误次数已达上限,系统关闭");
return -1;
}else{
printf(" 用户ID或密码错误,您还有 %d 次机会\n",count);
printf(" 用户ID :");
scanf("%s",_UserID);
printf(" 密码 :");
scanf("%s",_password);
count--;
}
if((strcmp(_UserID,UserAdministrator.UserID) == 0) && (strcmp(_password,UserAdministrator.password) == 0)){
return 1;
}else if((strcmp(_UserID,UserOwner.UserID) == 0) && (strcmp(_password,UserOwner.password) == 0)){
return 2;
}
for(int i = 0; i < Number_Of_Assistant;i++){
if((strcmp(_UserID,UserAssistant[i].UserID) == 0) && (strcmp(_password,UserAssistant[i].password) == 0)){
return 3;
}
}
}
}
void Logout(){
LoginStatus = 0;
}
void Modify_Owner(){
FILE *fp;
char NewID[20];
char Newpassword[12];
system("cls");
printf("\t********************************\n");
printf("\t* 修改店主信息 *\n");
printf("\t********************************\n");
printf(" 请输入新的用户ID :");
scanf("%s",NewID);
printf(" 请输入新的密码 :");
scanf("%s",Newpassword);
strncpy(UserOwner.UserID, NewID,strlen(NewID));
strncpy(UserOwner.password, Newpassword,strlen(Newpassword));
if((fp=fopen("Owner.txt","w+"))==NULL){
printf(" 修改失败!\n 按任意键以继续。");
}else{
if(fprintf(fp,"%s %s", UserOwner.UserID, UserOwner.password)<0){
fclose(fp);
remove("Owner.txt");
printf(" 修改失败!\n 按任意键以继续。");
}
else{
fclose(fp);
printf(" 修改成功!\n 按任意键以继续。");
}
}
getch();
}
void Add_Assistant(){
int i = 0, num = 0;
FILE *fp;
char UserID[20];
char password[12];
system("cls");
printf("\t********************************\n");
printf("\t* 添加前台用户 *\n");
printf("\t********************************\n");
printf(" 请输入用户ID :");
scanf("%s",UserID);
printf(" 请输入密码 :");
scanf("%s",password);
strncpy(UserAssistant[Number_Of_Assistant].UserID, UserID,strlen(UserID));
strncpy(UserAssistant[Number_Of_Assistant].password, password,strlen(password));
UserAssistant[Number_Of_Assistant].UserFlag = 1;
Number_Of_Assistant++;
if((fp=fopen("Assistant.txt","w+"))==NULL){
printf(" 添加失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Assistant; i++){
if(fprintf(fp,"%s %s\n", UserAssistant[i].UserID, UserAssistant[i].password)<0){
fclose(fp);
remove("Assistant.txt");
printf(" 添加失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Assistant){
fclose(fp);
if((fp=fopen("AssistantNumber.txt","r+"))!=NULL){
fscanf(fp,"%d",&num);
fclose(fp);
}
if((fp=fopen("AssistantNumber.txt","w+"))==NULL){
printf(" 添加失败!\n 按任意键以继续。");
}else{
if(fprintf(fp,"%d", Number_Of_Assistant)<0){
fclose(fp);
if( num == 0){
remove("AssistantNumber.txt");
}else{
if((fp=fopen("AssistantNumber.txt","w+"))!=NULL){
fprintf(fp,"%d", num);
fclose(fp);
}
}
printf(" 添加失败!\n 按任意键以继续。");
}else{
fclose(fp);
printf(" 添加成功!\n 按任意键以继续。");
}
}
}
}
getch();
}
void Delete_Assistant(){
int i = 0, num = 0;
FILE *fp;
char UserID[20];
char password[12];
system("cls");
printf("\t********************************\n");
printf("\t* 删除前台用户 *\n");
printf("\t********************************\n");
if(Number_Of_Assistant == 0){
printf(" 目前还没有前台用户。\n 按任意键返回。");
getch();
return;
}
printf(" 请输入前台用户的ID :");
scanf("%s",UserID);
for(i = 0; i < Number_Of_Assistant; i++){
if(strcmp(UserAssistant[i].UserID,UserID) == 0)
break;
}
if(i == Number_Of_Assistant){
printf("未找到该前台用户信息!\n 按任意键返回。\n");
getch();
return;
}
printf(" 请确认前台用户密码:");
scanf("%s",password);
if(strcmp(UserAssistant[i].password,password) == 0){
for(;i < (Number_Of_Assistant-1);i++){
UserAssistant[i] = UserAssistant[i+1];
}
Number_Of_Assistant--;
if((fp=fopen("Assistant.txt","w+"))==NULL){
printf(" 删除失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Assistant; i++){
if(fprintf(fp,"%s %s\n", UserAssistant[i].UserID, UserAssistant[i].password)<0){
fclose(fp);
remove("Assistant.txt");
printf(" 删除失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Assistant){
fclose(fp);
if((fp=fopen("AssistantNumber.txt","r+"))!=NULL ){
fscanf(fp,"%d",&num);
fclose(fp);
}
if((fp=fopen("AssistantNumber.txt","w+"))==NULL){
remove("AssistantNumber.txt");
remove("Assistant.txt");
printf(" 删除失败!前台用户数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
}else{
if(fprintf(fp,"%d", Number_Of_Assistant)<0){
fclose(fp);
if(num == 1){
remove("AssistantNumber.txt");
}else{
if((fp=fopen("AssistantNumber.txt","w+"))!=NULL){
fprintf(fp,"%d", num);
fclose(fp);
}
}
printf(" 删除失败!\n 按任意键以继续。");
}else{
fclose(fp);
printf(" 删除成功!\n 按任意键以继续。");
}
}
}
}
}else{
printf("密码错误, 未能找到改前台信息!\n 按任意键返回。\n");
getch();
return;
}
getch();
}
void Modify_Assistant(){
int i = 0;
FILE *fp;
char UserID[20];
char password[12];
char NewID[20];
char Newpassword[12];
system("cls");
printf("\t********************************\n");
printf("\t* 修改前台信息 *\n");
printf("\t********************************\n");
if(Number_Of_Assistant == 0){
printf(" 目前还没有前台用户。\n 按任意键返回。");
getch();
return;
}
printf(" 请输入前台的用户ID :");
scanf("%s",UserID);
for(i = 0; i < Number_Of_Assistant; i++){
if(strcmp(UserAssistant[i].UserID,UserID) == 0)
break;
}
if(i == Number_Of_Assistant){
printf("未找到该前台信息!\n 按任意键返回。\n");
getch();
return;
}
printf(" 请确认前台用户密码:");
scanf("%s",password);
if(strcmp(UserAssistant[i].password,password) == 0){
printf(" 已找到该前台信息\n");
printf("当前其用户ID为: %s 密码为: %s\n", UserAssistant[i].UserID,UserAssistant[i].password);
printf(" 请输入新的用户ID :");
scanf("%s",NewID);
printf(" 请输入新的密码 :");
scanf("%s",Newpassword);
strncpy(UserAssistant[i].UserID, NewID,strlen(NewID));
strncpy(UserAssistant[i].password, Newpassword,strlen(Newpassword));
if((fp=fopen("Assistant.txt","w+"))==NULL){
printf(" 修改失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Assistant; i++){
if(fprintf(fp,"%s %s\n", UserAssistant[i].UserID, UserAssistant[i].password)<0){
fclose(fp);
remove("Assistant.txt");
printf(" 修改失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Assistant){
fclose(fp);
printf(" 修改成功!\n 按任意键以继续。");
}
}
getch();
}
}
void Find_Assistant(){
system("cls");
printf("\t********************************\n");
printf("\t* 查询所有前台信息 *\n");
printf("\t********************************\n");
if(Number_Of_Assistant == 0){
printf("目前没有前台人员. 按任意键返回...");
getch();
return;
}
printf("\t* No 用户名 ***** 密码 *\n");
for(int i = 0; i < Number_Of_Assistant; i++){
printf("\t* %d %s\t * %s\t*\n",i + 1 , UserAssistant[i].UserID, UserAssistant[i].password);
}
printf("\t********************************\n");
printf("查询结束,按任意键返回...");
getch();
}
void Add_Order(){
int i = 0, num = 0;
FILE *fp;
char OIname[10];
char OItell[11];
char OIdate[20];
char OItime[20];
char Year[5];
char Mon[2] ;
char Day[2] ;
char Hour[2];
char Min[2] ;
int OImember;
long int OIid;
char OIplaceNo[2];
time_t now;
struct tm *p;
time(&now);
p = localtime(&now);
system("cls");
printf("\t********************************\n");
printf("\t* 添加新预订 *\n");
printf("\t********************************\n");
printf(" 请输入预订人姓名 :");
scanf("%s",OIname);
strncpy(Order_Info[Number_Of_Order].OIname, OIname,strlen(OIname));
printf(" 请输入 11位电话 :");
scanf("%s",OItell);
strncpy(Order_Info[Number_Of_Order].OItell, OItell,strlen(OItell));
strftime(OIdate, sizeof(OIdate), "%Y-%m-%d>%H:%M", p);
strncpy(Order_Info[Number_Of_Order].OIdate, OIdate,strlen(OIdate));
printf(" 请输入 年份(20xx) :");
scanf("%s",Year);
strncat(OItime, Year, strlen(Year));
strncat(OItime, "-", 1 );
printf(" 请输入 月份(01~12):");
scanf("%s",Mon);
strncat(OItime, Mon, strlen(Mon) );
strncat(OItime, "-", 1 );
printf(" 请输入 日期(01~31):");
scanf("%s",Day);
strncat(OItime, Day, strlen(Day) );
strncat(OItime, ">", 1 );
printf(" 请输入 时 (00~23):");
scanf("%s",Hour);
strncat(OItime, Hour, strlen(Hour));
strncat(OItime, ":", 1 );
printf(" 请输入 分 (00~59):");
scanf("%s",Min);
strncat(OItime, Min, strlen(Min) );
strncpy(Order_Info[Number_Of_Order].OItime, OItime,strlen(OItime));
OIid = TimeStrToInt(OItime);
Order_Info[Number_Of_Order].OIid = OIid;
printf(" 请输入(A-D 1-5)餐位 :");
scanf("%s",OIplaceNo);
strncpy(Order_Info[Number_Of_Order].OIplaceNo, OIplaceNo,strlen(OIplaceNo));
if(Number_Of_Order != 0){
for(i = 0; i < Number_Of_Order; i++){
if((OIid / 100 == Order_Info[i].OIid / 100) &&
((OIid % 100 - 3) < (Order_Info[i].OIid % 100)) &&
((OIid % 100 + 3) > (Order_Info[i].OIid % 100)) &&
(strcmp(OIplaceNo, Order_Info[i].OIplaceNo)==0)){
printf("非常抱歉,该餐位在此时段已被预订\n");
printf("输入 1 修改时间;2 修改餐桌: \n");
switch(getch()){
case 49:
printf(" 请输入 年份(20xx) :");
scanf("%s",Year);
strncat(OItime, Year, strlen(Year));
strncat(OItime, "-", 1 );
printf(" 请输入 月份(01~12):");
scanf("%s",Mon);
strncat(OItime, Mon, strlen(Mon) );
strncat(OItime, "-", 1 );
printf(" 请输入 日期(01~31):");
scanf("%s",Day);
strncat(OItime, Day, strlen(Day) );
strncat(OItime, ">", 1 );
printf(" 请输入 时 (00~23):");
scanf("%s",Hour);
strncat(OItime, Hour, strlen(Hour));
strncat(OItime, ":", 1 );
printf(" 请输入 分 (00~59):");
scanf("%s",Min);
strncat(OItime, Min, strlen(Min) );
strncpy(Order_Info[Number_Of_Order].OItime, OItime,strlen(OItime));
OIid = TimeStrToInt(OItime);
Order_Info[Number_Of_Order].OIid = OIid;
break;
case 50:
printf(" 请输入(A-D 1-5)餐位 :");
scanf("%s",OIplaceNo);
strncpy(Order_Info[Number_Of_Order].OIplaceNo, OIplaceNo,strlen(OIplaceNo));
break;
}
i = 0;
}
}
}
printf(" 请输入 就餐人数(不超过15人) :");
scanf("%d",&OImember);
Order_Info[Number_Of_Order].OImember = OImember;
while(OImember>15){
printf(" 输入超过15人!\n");
printf(" 请重新输入 :");
scanf("%d",&OImember);
}
Number_Of_Order++;
if((fp=fopen("OrderInfo.txt","w+"))==NULL){
printf(" 添加失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Order; i++){
if(fprintf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, Order_Info[i].OImember, Order_Info[i].OIid, Order_Info[i].OIplaceNo)<0){
fclose(fp);
remove("OrderInfo.txt");
printf(" 添加失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Order){
fclose(fp);
if((fp=fopen("OrderNumber.txt","r+"))!=NULL){
fscanf(fp,"%d",&num);
fclose(fp);
}
if((fp=fopen("OrderNumber.txt","w+"))==NULL){
printf(" 添加失败!\n 按任意键以继续。");
}else{
if(fprintf(fp,"%d", Number_Of_Order)<0){
fclose(fp);
if( num == 0){
remove("OrderNumber.txt");
}else{
if((fp=fopen("OrderNumber.txt","w+"))!=NULL){
fprintf(fp,"%d", num);
fclose(fp);
}
}
printf(" 添加失败!\n 按任意键以继续。");
}else{
fclose(fp);
printf(" 添加成功!\n 按任意键以继续。");
}
}
}
}
getch();
}
void Delete_Order(){
int i = 0, num = 0;
FILE *fp;
char OIname[10];
long int OIid;
char OIplaceNo[2];
system("cls");
printf("\t********************************\n");
printf("\t* 删除预订信息 *\n");
printf("\t********************************\n");
if(Number_Of_Order == 0){
printf(" 目前还没有预订订单。\n 按任意键返回。");
getch();
return;
}
printf(" 请输入预订人姓名 :");
scanf("%s",OIname);
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0)
break;
}
if(i == Number_Of_Assistant){
printf("未找到该客户的预订信息!\n 按任意键返回。\n");
getch();
return;
}
printf("\t********************************\n");
printf("\t* 查询结果 *\n");
printf("\t* 订单编号 预订时间 餐位 *\n");
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0){
printf("\t* %d %s %s *\n",
Order_Info[i].OIid,Order_Info[i].OItime,Order_Info[i].OIplaceNo);
}
}
printf("\t********************************\n");
printf(" 请输入要删除的订单编号:");
scanf("%d",&OIid);
printf(" 请输入 餐位编号:");
scanf("%s",OIplaceNo);
for(i = 0; i < Number_Of_Order; i++){
if((strcmp(Order_Info[i].OIname,OIname) == 0)
&& (Order_Info[i].OIid == OIid)
&& (strcmp(Order_Info[i].OIplaceNo,OIplaceNo) == 0))
break;
}
if(i == Number_Of_Order){
printf("未找到该订单信息!\n 按任意键返回。\n");
getch();
return;
}
for(;i < (Number_Of_Order-1);i++){
Order_Info[i] = Order_Info[i+1];
}
Number_Of_Order--;
if((fp=fopen("OrderInfo.txt","w+"))==NULL){
printf(" 删除失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Order; i++){
if(fprintf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, Order_Info[i].OImember, Order_Info[i].OIid, Order_Info[i].OIplaceNo)<0){
fclose(fp);
remove("OrderInfo.txt");
printf(" 删除失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Order){
fclose(fp);
if((fp=fopen("OrderNumber.txt","r+"))!=NULL ){
fscanf(fp,"%d",&num);
fclose(fp);
}
if((fp=fopen("OrderNumber.txt","w+"))==NULL){
remove("OrderNumber.txt");
remove("OrderInfo.txt");
printf(" 删除失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
}else{
if(fprintf(fp,"%d", Number_Of_Order)<0){
fclose(fp);
if(num == 1){
remove("OrderNumber.txt");
}else{
if((fp=fopen("OrderNumber.txt","w+"))!=NULL){
fprintf(fp,"%d", num);
fclose(fp);
}
}
printf(" 删除失败!\n 按任意键以继续。");
}else{
fclose(fp);
printf(" 删除成功!\n 按任意键以继续。");
}
}
}
}
getch();
}
void Modify_Order(){
int i = 0;
FILE *fp;
char OIname[10];
long int OIid;
long int TempOIid;
char OIplaceNo[2];
system("cls");
printf("\t********************************\n");
printf("\t* 修改订单信息 *\n");
printf("\t********************************\n");
if(Number_Of_Order == 0){
printf(" 目前还没有预订订单。\n 按任意键返回。");
getch();
return;
}
printf(" 请输入预订人姓名 :");
scanf("%s",OIname);
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0)
break;
}
if(i == Number_Of_Assistant){
printf("未找到该客户的预订信息!\n 按任意键返回。\n");
getch();
return;
}
printf("************************************************************\n");
printf("* 查询结果 *\n");
printf("* 预订人 预订时间 餐位 人数 订单编号 *\n");
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0){
printf("* %s %s %s %d %d *\n",
Order_Info[i].OIname,Order_Info[i].OItime, Order_Info[i].OIplaceNo,
Order_Info[i].OImember,Order_Info[i].OIid);
}
}
printf("*************************************************************\n");
printf(" 请输入要修改的订单编号:");
scanf("%d",&TempOIid);
OIid = TempOIid;
printf(" 请输入 餐位编号:");
scanf("%s",OIplaceNo);
for(i = 0; i < Number_Of_Order; i++){
if((strcmp(Order_Info[i].OIname,OIname) == 0)
&& (Order_Info[i].OIid == OIid)
&& (strcmp(Order_Info[i].OIplaceNo,OIplaceNo) == 0))
break;
}
if(i == Number_Of_Order){
printf("未找到该订单信息!\n 按任意键返回。\n");
getch();
return;
}
printf(" 已找到该订单信息\n");
printf(" 输入 1 :修改订单预订时间");
printf(" 输入 2 :修改订单餐位");
printf(" 输入 3 :修改订单预订人数\n");
switch(getch()){
case 49:
Modify_OrderTime(i);
break;
case 50:
Modify_OrderPlaceNo(i);
break;
case 51:
Modify_OrderMember(i);
break;
}
}
void Find_AllOrder(){
int i = 0;
system("cls");
printf("**************************************************************\n");
printf("* 查询所有订单 *\n");
printf("**************************************************************\n");
if(Number_Of_Order == 0){
printf(" 目前还没有预订订单。\n 按任意键返回。");
getch();
return;
}
printf("*************************************************************\n");
printf("* 查询结果 *\n");
printf("* 预订人 电话 预订时间 餐位 人数 订单编号 *\n");
for(i = 0; i < Number_Of_Order; i++){
printf("* %s %s %s %s %d %d *\n",
Order_Info[i].OIname,Order_Info[i].OItell,Order_Info[i].OItime,
Order_Info[i].OIplaceNo, Order_Info[i].OImember,Order_Info[i].OIid);
}
printf("*************************************************************\n");
printf("按任意键返回\n");
getch();
}
void Find_Order(){
int i = 0;
char OIname[10];
system("cls");
printf("**************************************************************\n");
printf("* 查询订单 *\n");
printf("**************************************************************\n");
if(Number_Of_Order == 0){
printf(" 目前还没有预订订单。\n 按任意键返回。");
getch();
return;
}
printf(" 请输入需要查询客户的姓名 :");
scanf("%s",OIname);
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0)
break;
}
if(i == Number_Of_Order){
printf("未找到该客户的预订信息!\n 按任意键返回。\n");
getch();
return;
}
printf("**************************************************************\n");
printf("* 查询结果 *\n");
printf("* 预订人 电话 预订时间 餐位 人数 订单编号 *\n");
for(i = 0; i < Number_Of_Order; i++){
if(strcmp(Order_Info[i].OIname,OIname) == 0){
printf("* %s %s %s %s %d %d *\n",
Order_Info[i].OIname,Order_Info[i].OItell,Order_Info[i].OItime,
Order_Info[i].OIplaceNo, Order_Info[i].OImember,Order_Info[i].OIid);
}
}
printf("**************************************************************\n");
printf("按任意键返回\n");
getch();
}
void Modify_OrderTime(int index){
int i = 0;
FILE *fp;
char OItime[20];
char Year[4];
char Mon[2];
char Day[2];
char Hour[2];
char Min[2];
long int OIid;
printf(" 请输入 年份(20xx) :");
scanf("%s",Year);
strncat(OItime, Year, strlen(Year));
strncat(OItime, "-", 1 );
printf(" 请输入 月份(01~12):");
scanf("%s",Mon);
strncat(OItime, Mon, strlen(Mon) );
strncat(OItime, "-", 1 );
printf(" 请输入 日期(01~31):");
scanf("%s",Day);
strncat(OItime, Day, strlen(Day) );
strncat(OItime, ">", 1 );
printf(" 请输入 时 (00~23):");
scanf("%s",Hour);
strncat(OItime, Hour, strlen(Hour));
strncat(OItime, ":", 1 );
printf(" 请输入 分 (00~59):");
scanf("%s",Min);
strncat(OItime, Min, strlen(Min) );
strncpy(Order_Info[index].OItime, OItime,strlen(OItime));
printf("%s",Order_Info[index].OItime);
OIid = TimeStrToInt(OItime);
Order_Info[index].OIid = OIid;
printf("%d",Order_Info[index].OIid);
if(Number_Of_Order != 0){
for(i = 0; i < Number_Of_Order; i++){
if((OIid / 100 == Order_Info[i].OIid / 100) &&
((OIid % 100 - 3) < (Order_Info[i].OIid % 100)) &&
((OIid % 100 + 3) > (Order_Info[i].OIid % 100)) &&
(strcmp(Order_Info[index].OIplaceNo, Order_Info[i].OIplaceNo)==0) &&
(i != index)){
printf("非常抱歉,该餐位在此时段已被预订,请重新输入预定时间\n");
printf(" 请输入 年份(20xx) :");
scanf("%s",Year);
strncat(OItime, Year, strlen(Year));
strncat(OItime, "-", 1 );
printf(" 请输入 月份(01~12):");
scanf("%s",Mon);
strncat(OItime, Mon, strlen(Mon) );
strncat(OItime, "-", 1 );
printf(" 请输入 日期(01~31):");
scanf("%s",Day);
strncat(OItime, Day, strlen(Day) );
strncat(OItime, ">", 1 );
printf(" 请输入 时 (00~23):");
scanf("%s",Hour);
strncat(OItime, Hour, strlen(Hour));
strncat(OItime, ":", 1 );
printf(" 请输入 分 (00~59):");
scanf("%s",Min);
strncat(OItime, Min, strlen(Min) );
strncpy(Order_Info[index].OItime, OItime,strlen(OItime));
OIid = TimeStrToInt(OItime);
Order_Info[index].OIid = OIid;
i = 0;
}
}
}
if((fp=fopen("OrderInfo.txt","w+"))==NULL){
printf(" 修改失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Order; i++){
if(fprintf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, Order_Info[i].OImember, Order_Info[i].OIid, Order_Info[i].OIplaceNo)<0){
fclose(fp);
remove("OrderInfo.txt");
printf(" 修改失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Order){
fclose(fp);
printf("订单预订时间修改成功!订单编号发生改变. 按任意键返回...");
}
}
getch();
}
void Modify_OrderPlaceNo(int index){
int i = 0;
FILE *fp;
char OIplaceNo[2];
printf(" 请输入(A-D 1-5)餐位 :");
scanf("%s",OIplaceNo);
strncpy(Order_Info[Number_Of_Order].OIplaceNo, OIplaceNo,strlen(OIplaceNo));
if(Number_Of_Order != 0){
for(i = 0; i < Number_Of_Order; i++){
if((Order_Info[index].OIid / 100 == Order_Info[i].OIid / 100) &&
((Order_Info[index].OIid % 100 - 3) < (Order_Info[i].OIid % 100)) &&
((Order_Info[index].OIid % 100 + 3) > (Order_Info[i].OIid % 100)) &&
(strcmp(OIplaceNo, Order_Info[i].OIplaceNo)==0)){
printf("非常抱歉,该餐位在此时段已被预订,请重新输入餐位\n");
printf(" 请输入(A-D 1-5)餐位 :");
scanf("%s",OIplaceNo);
strncpy(Order_Info[Number_Of_Order].OIplaceNo, OIplaceNo,strlen(OIplaceNo));
i = 0;
}
}
}
if((fp=fopen("OrderInfo.txt","w+"))==NULL){
printf(" 修改失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Order; i++){
if(fprintf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, Order_Info[i].OImember, Order_Info[i].OIid, Order_Info[i].OIplaceNo)<0){
fclose(fp);
remove("OrderInfo.txt");
printf(" 修改失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Order){
fclose(fp);
printf("订单预订餐位修改成功!按任意键返回...");
}
}
getch();
}
void Modify_OrderMember(int index){
int i = 0, OImember = 0;
FILE *fp;
printf(" 请输入 就餐人数(不超过15人) :");
scanf("%d",&OImember);
while(OImember>15){
printf(" 输入超过15人!\n");
printf(" 请重新输入 :");
scanf("%d",&OImember);
}
Order_Info[index].OImember = OImember;
if((fp=fopen("OrderInfo.txt","w+"))==NULL){
printf(" 修改失败!\n 按任意键以继续。");
}else{
for(i = 0; i < Number_Of_Order; i++){
if(fprintf(fp,"%s %s %s %s %d %d %s\n",
Order_Info[i].OIname, Order_Info[i].OItell, Order_Info[i].OIdate,
Order_Info[i].OItime, Order_Info[i].OImember, Order_Info[i].OIid, Order_Info[i].OIplaceNo)<0){
fclose(fp);
remove("OrderInfo.txt");
printf(" 修改失败!数据已丢失!请重新执行写入操作.\n 按任意键以继续。");
break;
}
}
if(i == Number_Of_Order){
fclose(fp);
printf("订单预订就餐人数修改成功!按任意键返回...");
}
}
getch();
}
void Restore(){
FILE *fp;
if((fp=fopen("Owner.txt","r+"))==NULL){
printf("店主信息还原成功...\n");
}else{
fclose(fp);
if(remove("Owner.txt") == 0){
printf("店主信息还原成功...\n");
}else{
printf("店主信息还原失败\n");
}
}
if((fp=fopen("AssistantNumber.txt","r+"))==NULL){
printf("店员数量信息已归零...\n");
printf("店员信息还原成功...\n");
}else{
fclose(fp);
if(remove("AssistantNumber.txt") == 0){
if((fp=fopen("Assistant.txt","r+"))==NULL){
printf("店员数量信息已归零...\n");
printf("店员信息还原成功...\n");
}else{
fclose(fp);
if(remove("Assistant.txt") == 0){
printf("店员数量信息已归零...\n");
printf("店员信息还原成功...\n");
}else{
printf("店员信息还原失败\n");
}
}
}else{
printf("店员信息还原失败\n");
}
}
if((fp=fopen("OrderNumber.txt","r+"))==NULL){
printf("预订数量信息已归零...\n");
printf("预订信息还原成功...\n");
}else{
fclose(fp);
if(remove("OrderNumber.txt") == 0){
if((fp=fopen("OrderInfo.txt","r+"))==NULL){
printf("预订数量信息已归零...\n");
printf("预订信息还原成功...\n");
}else{
fclose(fp);
if(remove("OrderInfo.txt") == 0){
printf("预订数量信息已归零...\n");
printf("预订信息还原成功...\n");
}else{
printf("预订信息还原失败\n");
}
}
}else{
printf("预订信息还原失败\n");
}
}
LoginStatus = 0;
init_sys();
printf("系统信息还原完成,请重新打开程序。\n");
getch();
exit(0);
}
long int TimeStrToInt(char *str){
long int ID;
for (int i = 0,j = 0; i < strlen(str); i++){
if(str[i]>47 && str[i]<58){
j++;
switch(j){
case 1: ID += ((int)str[i]-48)*1000000000;break;
case 2: ID += ((int)str[i]-48)*100000000;break;
case 3: ID += ((int)str[i]-48)*10000000;break;
case 4: ID += ((int)str[i]-48)*1000000;break;
case 5: ID += ((int)str[i]-48)*100000;break;
case 6: ID += ((int)str[i]-48)*10000;break;
case 7: ID += ((int)str[i]-48)*1000;break;
case 8: ID += ((int)str[i]-48)*100;break;
case 9: ID += ((int)str[i]-48)*10;break;
case 10:ID += ((int)str[i]-48)*1;break;
}
}
}
return ID;
}