#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
#define NULL 0
#define LEN sizeof(struct workers)/*定义结构体workers的长度为LEN*/
#define FILENAME "workers.db"/*定义数据库文件名为workers.db*/
int a=0;/*全局参数变量*/
struct workers/*建立结构体*/
{
int id;/*学生号*/
char name[10];/*姓名*/
char sex[10];/*性别*/
char age[10];/*年龄*/
char level[10];/*学历*/
char wages[10];/*工资*/
char add[25];/*地址*/
char call[15];/*电话*/
struct workers *next;/*建立单向链表*/
};
struct workers *head,*p,*p1;/*建立指针结构体*/
void output(struct workers *px)/*将输出信息分类,方便调用*/
{
printf ("学生号:%d\t姓名:%s\t性别:%s\t年龄:%s\n学历:%s\t工资:%s\t地址:%s\t电话:%s\n",px->id,px->name,px->sex,px->age,px->level,px->wages,px->add,px->call);
}
void input(int n,struct workers *px)/*将输入档案分类,方便调用*/
{
switch(n)
{
case 1:
loop:printf ("请输入学生号:");
scanf ("%d",&px->id);       
if (px->id==0)
{
printf ("学生号不能为0!\n");
goto loop;
}
break;
case 2:printf ("请输入姓名:");scanf ("%s",&px->name);break;
case 3:printf ("请输入性别:");scanf ("%s",&px->sex);break;
case 4:printf ("请输入年龄:");scanf ("%s",&px->age);break;
case 5:printf ("请输入学历:");scanf ("%s",&px->level);break;
case 6:printf ("请输入工资:");scanf ("%s",&px->wages);break;
case 7:printf ("请输入地址:");scanf ("%s",&px->add);break;
case 8:printf ("请输入电话:");scanf ("%s",&px->call);break;   
default:printf ("ERROR");
}
}
int menu()/*程序主菜单*/
{
int menu;
printf ("主菜单:\n1.查看\n2.创建\n3.修改\n4.删除\n5.保存档案为文件\n0.退出程序\n请问您要做什么:");
loop:menu=getch();
if (menu<48||menu>54)goto loop;/*ASCII表中48相当于0,54相当于6。只有当用户输入规定的数字时程序才会执行,否则不显示任何信息*/
printf ("%c\n",menu);
return menu-48;
}
struct workers *creat(void)/*利用链表创建一个,程序核心*/
{
int n;   
if (a==0)
{
p=p1=(struct workers *)malloc(LEN);/*开辟一个新内存单元*/
for (n=1;n<=8;n++)input(n,p);
head=p;
head->next=NULL;
a=a+1;
}
else
{
for (n=1;n<=8;n++)input(n,p);       
p1->next=p;
}
p1=p;
p=(struct workers *)malloc(LEN);
p->next=NULL;
printf ("创建成功!\n");
return(head);
};
void del()/*删除一个档案*/
{
int id;
printf ("请输入需要删除的学生的学生号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可供删除的档案\n");
goto end;
}
p=head;
while (id!=p->id&&p->next!=NULL)/*根据链表查档案*/
{
p1=p;
p=p->next;
}
if (id==p->id)
{
if (p==head)head=p->next;
else p1->next=p->next;
printf ("该已成功删除\n");
a=a-1;
}
else printf ("不到该档案\n");
end:;
}
int viewfile()/*浏览所有*/
{
struct workers *p2;
p2=head;
if (head==NULL)
{
printf ("档案为空。");
return 0;
}
if (head!=NULL)
do
{           
output(p2);
printf ("\n");           
p2=p2->next;
}while (p2!=NULL);
}
int searchid()/*根据学生号查档案*/
{
int id;
struct workers *p4;
printf ("请输入需要查的学生的学生号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可用的档案\n");
return 0;
}
p4=head;
while (id!=p4->id&&p4->next!=NULL)
{
p4=p4->next;
}
if (id==p4->id)output(p4);
else printf ("不到该档案\n");
return 0;
}
int searchname(char name[10])/*根据名字查...此能暂时还未完成*/
{
return 0;
}
void sortid(int id)/*根据学生号排序...此能暂时还未完成*/
{
}
int modifyfile()/*修改一个档案*/
{
int id,b;
struct workers *p3;
printf ("请输入需要修改的学生的学生号:");
scanf("%d",&id);
if (head==NULL)
{
printf ("没有任何可供修改的档案\n按任意键返回主菜单...");
getch();
return 0;;
}
p3=head;
while (id!=p3->id&&p3->next!=NULL)
{
p1=p3;
p3=p3->next;
}
if (id==p3->id)
{
printf ("该学生的档案已到:\n");
output(p3);
printf ("请输入修改后的信息:\n");
for (b=1;b<=8;b++)input(b,p3);
printf ("档案保存中......\n修改后的档案已保存...\n按任意键返回主菜单...");
b=getch();
return 1;
}
}
int view()/*主菜单--〉查看*/
{
int c;
char name[10];
int id;
start:system ("cls");
printf ("主菜单--〉查看:\n1.浏览全部档案\n2.根据学生号查询\n3.根据姓名查询\n4.按学生号排序\n0.返回主菜单\n请问您要做什么:");
loop:c=getch();
if (c<48||c>53)goto loop;/*只有当用户输入规定的数字时程序才会执行,否则不显示任何信息,有效避免误操作导致溢出*/
printf ("%c\n",c);
switch(c-48)
{
case 0:return 0;break;
case 1:
{
viewfile();
printf ("\n按任意键返回...");
getch();
goto start;
}
case 2:
{
searchid();
printf ("\n按任意键
返回...");
getch();
goto start;
}
case 3:searchname(name);
case 4:sortid(id);
}
goto start;
}   
int savefile(void)/*保存文件*/
{
FILE *fp;
struct workers *p5;
int i=0;
printf("\n\n\n\n");
printf("********** 保存文件......**********\n");
p5=head;
if((fp=fopen(FILENAME,"wb"))==NULL)
{
printf("不能打开文件\n");
return 0;
}
do
{
if(fwrite(p5,LEN,1,fp)!=1)
{
printf("文件写入错误!\n");
return 0;
}
p5=p5->next;
}while(p5!=NULL);
fclose(fp);
printf("\n\n\n\n");
printf("********** 保存文件成功!!! **********\n");
return 1;
}
int loadfile(void)/*默认载入档案文件*/
{
FILE *fp;   
int n=0;
while((fp=fopen(FILENAME,"rb"))==NULL)return 0;/*如果打开失败则返回0*/
do
{   
if (a==0)p=p1=(struct workers *)malloc(LEN);/*开辟一个新内存单元*/
if(fread(p,LEN,1,fp)!=1)break;
if (a==0)
{           
head=p;
head->next=NULL;
a=a+1;
}
else
{
p1->next=p;
}
p1=p;
p=(struct workers *)malloc(LEN);
p->next=NULL;
}while (p!=NULL);
printf ("打开成功!\n");
fclose(fp);
return 1;
}
int main(void)/*主程序代码*/
{
int quit;
head=NULL;
a=loadfile();/*打开数据文件*/
if (a==1)
{
printf ("按任意键进入主菜单...");
getch();
}
loop:system ("cls");
printf ("          Welcome to the Workers Information Management System\n              This a program of Curriculum Design\n");
printf ("                    Write By XXX,学号:xxxxx      Copyright\n");
switch(menu())
{
case 0:
printf ("您确定要退出程序吗?(Y/N)");
confirm:quit=getch();
if (quit=='y'||quit=='Y')/*只有当用户输入y时程序退出*/
{
printf ("Y");
return 0;
}
if (quit=='n'||quit=='N')goto loop;/*只有当用户输入n时,返回主菜单*/
goto confirm;
case 1:
view();
getch();
break;
case 2:
printf ("正在创建...\n");
creat();
printf ("按任意键返回...");
getch();结构体sizeof
break;
case 3:
modifyfile();
break;
case 4:
del();
printf ("按任意键返回...");
getch();
break;
case 5:
savefile();
printf ("按任意键返回...");
system ("pause");
break;
}
goto loop;       
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。