?? menu2.cpp
字號(hào):
#include "menu.h"
/*包含IsDate、Force、Input、delete_sys四個(gè)函數(shù)*/
/*-----------------------------------------------------------------*
*函數(shù): IsDate() *
*參數(shù): 字符串,整型 flag為1時(shí)判斷顯示日期的完整模式(1990-01-01) *
*作用: 判斷日期格式是否標(biāo)準(zhǔn) *
*返回: 整型 *
*-----------------------------------------------------------------*/
int IsDate(char temp[15],int flag)
{
int i;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char year[10]="";
char month[10]="";
char day[10]="";
for(i=0;i<10;i++)
{
if(i<4)
year[i]=temp[i];
if(4<i&&i<7)
month[i-5]=temp[i];
if(7<i&&i<10)
day[i-8]=temp[i];
}
year[5]='\0';
month[3]='\0';
day[3]='\0';
if('-'==temp[4]!=1)
{
return 0;
}
//年月的判斷
if(1900>atoi(year)||atoi(year)>2007||atoi(month)<1||atoi(month)>12)
{
return 0;
}
//flag控制天的判斷
if(flag==1&&('-'==temp[7]!=1||atoi(day)<1))
{
return 0;
}
if(flag==1)
{
//閏年天數(shù)的判斷
if((atoi(year)%400==0||(atoi(year)%4==0&&atoi(year)%100!=0))&&atoi(day)>29)
{
return 0;
}
//非閏年天數(shù)的判斷
if(!(atoi(year)%400==0||(atoi(year)%4==0&&atoi(year)%100!=0))&&atoi(day)>days[atoi(month)])
{
return 0;
}
}
return 1;
}
/*-----------------------------------------------------------------*
*函數(shù): Force() *
*參數(shù): 無(wú) *
*作用: 通過(guò)isdigit(),atoi()函數(shù)強(qiáng)制用戶輸入整型數(shù) *
*返回: 整型 *
*-----------------------------------------------------------------*/
int Force(void)
{
unsigned int i=1;
int num;
char ch[11];
while(1)
{
scanf("%s",ch);
if(ch[0]=='-'||isdigit(ch[0])!=0)
{
for(;i<strlen(ch);i++)
if(isdigit(ch[i])==0) /*判斷是否為數(shù)字0-9 頭文件ctype.h*/
break;
if(i+1>strlen(ch)&&!(ch[0]=='-'&&i==1))
{
num=atoi(ch);/*atoi()函數(shù)將字符轉(zhuǎn)化為整型*/
return num;
}
else
printf("\n\n請(qǐng)輸入數(shù)字:");
}
else
printf("\n\n請(qǐng)輸入數(shù)字:");
}
}
/*------------------------------------------------------------------*
*函數(shù): Input() *
*參數(shù): 整型,n[1]為表名的下標(biāo),i為表中列名號(hào),表結(jié)構(gòu)指針 *
*作用: 對(duì)輸入進(jìn)行判斷和處理 *
*返回: 無(wú) *
*------------------------------------------------------------------*/
sys Input(int n[3],int i,sys *all)
{
int flag=0,table=n[1];//flag提示錯(cuò)誤
int grade,Find[3]={0,table,0};
char temp[3][31];//最多有兩個(gè)屬性作為主鍵輸入
sys tmp;
extern char row_txt[15][13][15];
//學(xué)生表
if(table==1)
{
//限制學(xué)號(hào)
if(i==1)
{
do
{
printf("請(qǐng)輸入%s(10位):",row_txt[table][i]);
scanf("%s",temp[1]);
if(n[2]==1&&find(Find,temp[1],temp[1],all).studenthead!=NULL)
{
printf("\n該學(xué)號(hào)已存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).studenthead==NULL)
{
printf("\n該學(xué)號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n學(xué)號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//姓名
if(i==2)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制性別
if(i==3)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(男/女):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=2 || (strcmp("男",temp[1])!=0&&strcmp("女",temp[1])!=0));
}
//限制出生日期
if(i==4)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(例如:1990-01-01):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=10 || !(IsDate(temp[1],1)));
}
//限制入校日期
if(i==5)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(例如:1990-01):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=7 || !(IsDate(temp[1],0)));
}
//畢業(yè)中學(xué)
if(i==6)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制分?jǐn)?shù)
if(i==7)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(0-750):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>750);
//將整型轉(zhuǎn)換為字符型
itoa(grade,temp[1],10);
}
//聯(lián)系方式
if(i==8)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//住址
if(i==9)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//專業(yè)編號(hào)限制
if(i==10)
{
do
{
printf("請(qǐng)輸入%s(2位):",row_txt[table][i]);
scanf("%s",temp[1]);
Find[1]=4;
if(find(Find,temp[1],temp[1],all).specialityhead==NULL)
{
printf("\n該專業(yè)號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n專業(yè)號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//班號(hào)限制
if(i==11)
{
do
{
printf("請(qǐng)輸入%s(10位):",row_txt[table][i]);
scanf("%s",temp[1]);
Find[1]=6;
if(find(Find,temp[1],temp[1],all).classhead==NULL)
{
printf("\n該班號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n班號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//寢室號(hào)限制
if(i==12)
{
do
{
printf("請(qǐng)輸入%s(5位):",row_txt[table][i]);
scanf("%s",temp[1]);
Find[1]=14;
if(find(Find,temp[1],temp[1],all).chamberhead==NULL)
{
printf("\n該寢室號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=5)
{
printf("\n寢室號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入教師表
if(table==2)
{
//限制教師號(hào)
if(i==1)
{
do
{
printf("請(qǐng)輸入%s(10位):",row_txt[table][i]);
scanf("%s",temp[1]);
if(n[2]==1&&find(Find,temp[1],temp[1],all).teacherhead!=NULL)
{
printf("\n該教師號(hào)已存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).teacherhead==NULL)
{
printf("\n該教師號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n教師號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//姓名
if(i==2)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制性別
if(i==3)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(男/女):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=2 || (strcmp("男",temp[1])!=0&&strcmp("女",temp[1])!=0));
}
//職稱
if(i==4)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制出生日期
if(i==5)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s例如:1990-01-01):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=10 || !(IsDate(temp[1],1)));
}
//限制工作日期
if(i==6)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(例如:1990-01):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=7 || !(IsDate(temp[1],0)));
}
//限制基本工資
if(i==7)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(0-30000):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>30000);
//將整型轉(zhuǎn)換為字符型
itoa(grade,temp[1],10);
}
//院系號(hào)限制
if(i==8)
{
do
{
printf("請(qǐng)輸入%s(2位):",row_txt[table][i]);
scanf("%s",temp[1]);
Find[1]=5;
if(find(Find,temp[1],temp[1],all).departmenthead==NULL)
{
printf("\n該院系號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n院系號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入課程表
if(table==3)
{
//限制課程號(hào)
if(i==1)
{
do
{
printf("請(qǐng)輸入%s(10位):",row_txt[table][i]);
scanf("%s",temp[1]);
if(n[2]==1&&find(Find,temp[1],temp[1],all).coursehead!=NULL)
{
printf("\n該課程號(hào)已存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).coursehead==NULL)
{
printf("\n該課程號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n課程號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//課程名
if(i==2)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制講課學(xué)時(shí)或?qū)嶒?yàn)學(xué)時(shí)
if(i==3)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(0-120):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>120);
//將整型轉(zhuǎn)換為字符型
itoa(grade,temp[1],10);
}
//限制實(shí)驗(yàn)學(xué)時(shí)
if(i==4)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(0-120):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>120);
//將整型轉(zhuǎn)換為字符型
itoa(grade,temp[1],10);
}
//限制學(xué)分
if(i==5)
{
do
{
if(flag==1)
{
printf("\n輸入錯(cuò)誤,請(qǐng)重新輸入!\n\n");
}
printf("請(qǐng)輸入%s(0-10):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>10);
//將整型轉(zhuǎn)換為字符型
itoa(grade,temp[1],10);
}
//選用教材
if(i==6)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//院系號(hào)限制
if(i==7)
{
do
{
printf("請(qǐng)輸入%s(2位):",row_txt[table][i]);
scanf("%s",temp[1]);
Find[1]=5;
if(find(Find,temp[1],temp[1],all).departmenthead==NULL)
{
printf("\n該院系號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n院系號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入專業(yè)表
if(table==4)
{
//限制專業(yè)編號(hào)
if(i==1)
{
do
{
printf("請(qǐng)輸入%s(2位):",row_txt[table][i]);
scanf("%s",temp[1]);
if(n[2]==1&&find(Find,temp[1],temp[1],all).specialityhead!=NULL)
{
printf("\n該專業(yè)號(hào)已存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).specialityhead==NULL)
{
printf("\n該專業(yè)號(hào)不存在,請(qǐng)重新輸入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n專業(yè)號(hào)位數(shù)錯(cuò)誤,請(qǐng)重新輸入!\n\n");
continue;
}
break;
}while(1);
}
//專業(yè)名
if(i==2)
{
printf("請(qǐng)輸入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制創(chuàng)辦年份
if(i==3)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -