/*------------------------------------------------------------------------ * filename - workmanagerment.c * * written by * 沈豪杰(01213229)&&王鹏(01213208) *-----------------------------------------------------------------------*//*[]---------------------------------------------------[]*/ /* */ /* Turbo C Run workmanagerment.c- Version 1.1 */ /* */ /* */ /* Copyright (c) 2003 6 28 by shj and wp */ /* All Rights Reserved. */ /* */ /*[]---------------------------------------------------[]*/ #include<stdlib.h> #include<string.h> #include<ctype.h> #include<stdio.h> #define maxworker 100FILE *fp; /*定义全局变量fp,指向数据库文件 worker.txt*/strUCt date{ /*日期的结构,用于存储工人的生日,工作日期等*/ int year; int month; int day; }; struct address { /*地址的结构, 用于存储工人的地址*/ char PRovince[10]; char city[10]; char street[20]; }; struct WORKER { /*工人的资料总结构*/ char name[20]; enum {male,female}sex; struct date birthday; enum {elesch,middle,high,university,other}rofs; struct date workday; int workeri; char position[20]; struct address addr; int workerj; char tel[13]; }; /*程序的初始化函数,用于从数据库中读出现存的资料到内存中*/ data_load(int *i,struct WORKER *p){ char c; long int k; fp=fopen("worker.txt","r"); if(!fp){fopen("worker.txt","w+");*i=0;} else{ for((*i)=0;(*i)<maxworker;(*i)++){ if(feof(fp)) return; c=fgetc(fp); if(c==EOF) return; fflush(stdin); k=*i; fseek(fp,k*sizeof(struct WORKER),SEEK_SET); fread(&p[*i],sizeof(struct WORKER),1,fp); } } fclose(fp); } /*添加一个工人的资料*/ void add(int *i,struct WORKER *profile){ char add_name[20],add_position[20],add_addr_province[20],add_addr_city[20],add_addr_street[30],add_tel[13]; int add_birthday_year,add_birthday_month,add_birthday_day,add_workday_year,add_workday_month,add_workday_day; int add_sex,add_rofs; enum {false,true}status; status=false; printf("/n/tNow add NO. %d worker's profile/n",*i+1); /*以下是处理输入的循环,可能有些繁杂,希望高手给指点一下 其中status是个flag,用于指定是否有输错的地方,假如有的话, 马上跳的最初的提示。 */ while(status==false){ printf("Enter the name of the worker:"); scanf("%s",add_name); if(strlen(add_name)==0 strlen(add_name)>20){ status=false;puts("input error,name cannot over 8 character or less than 0 character!"); continue; } else status=true; printf("Enter the gender of worker:(1=>female,0=>male)"); scanf("%d",&add_sex); if(add_sex!=0 && add_sex!=1){ status=false;puts("only 0 or 1 can be accepted!"); continue; } else status=true; printf("Enter the birthday of worker:/n"); printf("/tYear:"); scanf("%4d",&add_birthday_year); if(add_birthday_year>9999 add_birthday_year<0){ status=false;puts("input error,the year of birthday cannot more than 9999 or less than 0!"); continue; } else status=true; printf("/tMonth:"); scanf("%2d",&add_birthday_month); if(add_birthday_month>12 add_birthday_month<1){ status=false;puts("input error,the month of birthday cannot be more than 12 or less than 1"); continue; } else status=true; printf("/tDay:"); scanf("%2d",&add_birthday_day); if(add_birthday_day>31 add_birthday_day<1){ status=false;puts("input error,the year of birthday cannot be more than 31 or less than 1!"); continue; } else status=true; printf("Enter the workday of worker:/n"); printf("/tYear:"); scanf("%4d",&add_workday_year); if(add_workday_year>9999 add_workday_year<0){ status=false;puts("input error,the year of workday cannot more than 9999 or less than 0!"); continue; } else status=true; printf("/tMonth:"); scanf("%2d",&add_workday_month); if(add_workday_month>12 add_workday_month<1){ status=false;puts("input error,the month of workday cannot be more than 12 or less than 1"); continue; } else status=true; printf("/tDay:"); scanf("%2d",&add_workday_day); if(add_workday_day>31 add_workday_day<1){ status=false;puts("input error,the year of workday cannot be more than 31 or less than 1!"); continue; } else status=true; [1] [2] [3] [4] [5] [6]