#include<malloc.h>
#include<string.h>
#include<windows.h>
#define len sizeof(List)
typedef struct Node
{
char number[13];
char name[20];
char sex[6];
char age[4];
char id[19];
char address[50];
struct Node *next;
}List;
List *head;
void Insert(List *temp)
{
List *p;
p = head;
while(p->next != NULL)
{
p = p->next;
if(strcmp(p->number, temp->number) == 0)
{
printf("錄入失敗!\n");
printf("鏈表中已存在這個編號,請重新輸入!\n");
Sleep(1000);
return;
}
}
p->next = temp;
temp->next = NULL;
}
void Add()
{
List *p = (List *)malloc(len);
printf("請輸入成員的編號:");
scanf("%s", p->number);
printf("請輸入成員的姓名:");
scanf("%s", p->name);
printf("請輸入成員的性別:");
scanf("%s", p->sex);
printf("請輸入成員的年齡:");
scanf("%s", p->age);
printf("請輸入成員的身份證號:");
scanf("%s", p->id);
printf("請輸入成員的住址:");
scanf("%s", p->address);
Insert(p);
}
void Delete()
{
List *p, *q;
p = head;
int num = 0;
char name[20];
char number[13];
int select1, select2, select3;
printf("==================================\n");
printf("1.按編號刪除 2.按名字刪除\n");
printf("==================================\n");
path_D:
printf("請選擇你要執行的方案(1~2):");
scanf("%d", &select1);
switch(select1)
{
case 1:
path_D1:
q = p->next;
printf("請輸入你要刪除的成員編號:");
scanf("%s", number);
while(q != NULL)
{
if(strcmp(q->number, number) == 0)
{
free(q);
p->next = q->next;
printf("該結點已經成功刪除...\n");
num++;
}
q = q->next;
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select2);
switch(select2)
{
case 1:goto path_D1;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
case 2:
printf("這個方案暫時存在不明問題,請選擇第一個方案...\n");
Sleep(1000);
goto path_D;
/*
path_D2:
q = p->next;
printf("請輸入你要刪除的成員姓名:");
scanf("%s", name);
while(q != NULL)
{
if(strcmp(q->name, name) == 0)
{
free(q);
p->next = q->next;
printf("該結點已經成功刪除...\n");
num++;
}
q = q->next;
}
else
{
printf("鏈表爲空,請先添加信息...\n");
Sleep(1000);
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select3);
switch(select3)
{
case 1:goto path_D2;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
default:printf("沒得這個方案,重新選...\n");goto path_D;
*/
}
}
void Modify()
{
List *p, *q;
p = head;
int num = 0;
char name[20];
char number[13];
int select1, select2, select3;
printf("==================================\n");
printf("1.按編號修改 2.按名字修改\n");
printf("==================================\n");
path_M:
printf("請選擇你要執行的方案(1~2):");
scanf("%d", &select1);
switch(select1)
{
case 1:
path_M1:
q = p->next;
printf("請輸入你要修改的成員編號:");
scanf("%s", number);
while(q != NULL)
{
if(strcmp(q->number, number) == 0)
{
printf("請輸入修改後成員的編號:");
scanf("%s", q->number);
printf("請輸入修改後成員的姓名:");
scanf("%s", q->name);
printf("請輸入修改後成員的性別:");
scanf("%s", q->sex);
printf("請輸入修改後成員的年齡:");
scanf("%s", q->age);
printf("請輸入修改後成員的身份證號:");
scanf("%s", q->id);
printf("請輸入修改後成員的住址:");
scanf("%s", q->address);
printf("該結點已經成功修改...\n");
num++;
}
q = q->next;
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select2);
switch(select2)
{
case 1:goto path_M1;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
case 2:
path_M2:
q = p->next;
printf("請輸入你要修改的成員姓名:");
scanf("%s", name);
while(q != NULL)
{
if(strcmp(q->name, name) == 0)
{
printf("請輸入修改後成員的編號:");
scanf("%s", q->number);
printf("請輸入修改後成員的姓名:");
scanf("%s", q->name);
printf("請輸入修改後成員的性別:");
scanf("%s", q->sex);
printf("請輸入修改後成員的年齡:");
scanf("%s", q->age);
printf("請輸入修改後成員的身份證號:");
scanf("%s", q->id);
printf("請輸入修改後成員的住址:");
scanf("%s", q->address);
printf("該結點已經成功修改...\n");
num++;
}
q = q->next;
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select3);
switch(select3)
{
case 1:goto path_M2;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
default:printf("沒得這個方案,重新選...\n");goto path_M;
}
}
void Search()
{
List *p, *q;
p = head;
int num = 0;
char name[20];
char number[13];
int select1, select2, select3;
printf("==================================\n");
printf("1.按編號查找 2.按名字查找\n");
printf("==================================\n");
path_S:
printf("請選擇你要執行的方案(1~2):");
scanf("%d", &select1);
switch(select1)
{
case 1:
path_S1:
q = p->next;
printf("請輸入你要查找的成員編號:");
scanf("%s", number);
while(q != NULL)
{
if(strcmp(q->number, number) == 0)
{
printf("\n編號\t\t姓名\t性別\t年齡\t身份證號\t\t家庭住址\n\n");
printf("%-12s\t%-5s\t%-3s\t", q->number, q->name, q->sex);
printf("%-2s\t%-20s\t%-s\n", q->age, q->id, q->address);
num++;
}
q = q->next;
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select2);
switch(select2)
{
case 1:goto path_S1;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
case 2:
path_S2:
q = p->next;
printf("請輸入你要查找的成員姓名:");
scanf("%s", name);
while(q != NULL)
{
if(strcmp(q->name, name) == 0)
{
printf("\n編號\t\t姓名\t性別\t年齡\t身份證號\t\t家庭住址\n\n");
printf("%-12s\t%-5s\t%-3s\t", q->number, q->name, q->sex);
printf("%-2s\t%-20s\t%-s\n", q->age, q->id, q->address);
num++;
}
q = q->next;
}
if(num == 0)
{
printf("沒得這個結點,想好了再來...\n");
Sleep(1000);
printf("1.繼續 2.回到主界面\n");
printf("選擇你要執行的功能:");
scanf("%d", &select3);
switch(select3)
{
case 1:goto path_S2;
case 2:printf("請稍候...");return;
default:printf("選擇有誤,系統將回到主界面...\n");Sleep(500);return;
}
}
break;
default:printf("沒得這個方案,重新選...\n");goto path_S;
}
}
void Count()
{
List *temp;
temp = head;
int num = 0;
while(temp->next != NULL)
{
num++;
temp = temp->next;
}
printf("本條鏈表中共有%d個記錄!", num);
}
void Show()
{
float second;
List *p;
p = head->next;
printf("你需要暫停幾秒來瀏覽: ");
scanf("%f", &second);
printf("\n編號\t\t姓名\t性別\t年齡\t身份證號\t\t家庭住址\n\n");
while(p != NULL)
{
printf("%-12s\t%-5s\t%-3s\t", p->number, p->name, p->sex);
printf("%-2s\t%-20s\t%-s\n", p->age, p->id, p->address);
p = p->next;
}
Sleep(second*1000);
}
void Exit()
{
int i;
char str[36] = "試用期結束啦,大爺下次記得帶錢來喲~";
printf("\n");
for(i = 0; i <= 35; i++)
{
printf("%c", str[i]);
Sleep(150);
}
printf("\n");
exit(0);
}
void Save()
{
FILE *fp;
List *p;
p = head->next;
char *path;
fp = fopen("F:\\ifmt.txt", "w+");
if(fp == NULL)
{
printf("文件創建失敗,請重試...\n");
exit(0);
}
fprintf(fp, "編號\t\t姓名\t性別\t年齡\t身份證號\t\t家庭住址\n\n");
while(p != NULL)
{
fprintf(fp, "%-12s\t%-5s\t%-3s\t", p->number, p->name, p->sex);
fprintf(fp, "%-2s\t%-20s\t%-s\n", p->age, p->id, p->address);
p = p->next;
}
printf("信息存儲成功...\n");
printf("存儲位置在F:\\ifmt.txt");
Sleep(500);
fclose(fp);
}
void StartMenu()
{
printf("\n\n\n\n\n\n");
printf("\t\t\t==================================\n\n");
printf("\t\t\t Welcome To My Own System \n\n");
printf("\t\t\t==================================\n\n");
printf("\t\t\t 製作人:小明 \n\n");
printf("\t\t\t 工作室:德園七棟201 \n\n");
printf("\t\t\t==================================\n\n");
}
void ShowMenu()
{
printf("\n==================================\n");
printf(" 0.安全退出 7.信息存盤 \n");
printf("==================================\n");
printf("1.成員添加 2.成員刪除 3.成員修改\n");
printf("4.成員查詢 5.成員統計 6.成員輸出\n");
printf("==================================\n");
}
void SelectMenu()
{
int select;
path_SM:
ShowMenu();
printf("請選擇你要執行的功能(0~6):");
scanf("%d", &select);
switch(select)
{
case 1:
Add();
system("cls");
goto path_SM;
case 2:
Delete();
Sleep(1000);
system("cls");
goto path_SM;
case 3:
Modify();
Sleep(1000);
system("cls");
goto path_SM;
case 4:
Search();
Sleep(1000);
system("cls");
goto path_SM;
case 5:
Count();
Sleep(1000);
system("cls");
goto path_SM;
case 6:
Show();
Sleep(1000);
system("cls");
goto path_SM;
case 0:
Exit();
break;
case 7:
Save();
Sleep(1000);
system("cls");
goto path_SM;
default:
printf("沒得你選的這個功能,重新選...");
Sleep(1000);
system("cls");
goto path_SM;
}
}
void main()
{
head = (List *)malloc(len);
head->next = NULL;
StartMenu();
Sleep(2000);
system("cls");
SelectMenu();
}