📄 menu2.cpp
字号:
#include "menu.h"
/*包含IsDate、Force、Input、delete_sys四个函数*/
/*-----------------------------------------------------------------*
*函数: IsDate() *
*参数: 字符串,整型 flag为1时判断显示日期的完整模式(1990-01-01) *
*作用: 判断日期格式是否标准 *
*返回: 整型 *
*-----------------------------------------------------------------*/
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)
{
//闰年天数的判断
if((atoi(year)%400==0||(atoi(year)%4==0&&atoi(year)%100!=0))&&atoi(day)>29)
{
return 0;
}
//非闰年天数的判断
if(!(atoi(year)%400==0||(atoi(year)%4==0&&atoi(year)%100!=0))&&atoi(day)>days[atoi(month)])
{
return 0;
}
}
return 1;
}
/*-----------------------------------------------------------------*
*函数: Force() *
*参数: 无 *
*作用: 通过isdigit(),atoi()函数强制用户输入整型数 *
*返回: 整型 *
*-----------------------------------------------------------------*/
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) /*判断是否为数字0-9 头文件ctype.h*/
break;
if(i+1>strlen(ch)&&!(ch[0]=='-'&&i==1))
{
num=atoi(ch);/*atoi()函数将字符转化为整型*/
return num;
}
else
printf("\n\n请输入数字:");
}
else
printf("\n\n请输入数字:");
}
}
/*------------------------------------------------------------------*
*函数: Input() *
*参数: 整型,n[1]为表名的下标,i为表中列名号,表结构指针 *
*作用: 对输入进行判断和处理 *
*返回: 无 *
*------------------------------------------------------------------*/
sys Input(int n[3],int i,sys *all)
{
int flag=0,table=n[1];//flag提示错误
int grade,Find[3]={0,table,0};
char temp[3][31];//最多有两个属性作为主键输入
sys tmp;
extern char row_txt[15][13][15];
//学生表
if(table==1)
{
//限制学号
if(i==1)
{
do
{
printf("请输入%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该学号已存在,请重新输入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).studenthead==NULL)
{
printf("\n该学号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n学号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//姓名
if(i==2)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制性别
if(i==3)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%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输入错误,请重新输入!\n\n");
}
printf("请输入%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输入错误,请重新输入!\n\n");
}
printf("请输入%s(例如:1990-01):",row_txt[table][i]);
scanf("%s",temp[1]);
flag=1;
}while(strlen(temp[1])!=7 || !(IsDate(temp[1],0)));
}
//毕业中学
if(i==6)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制分数
if(i==7)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%s(0-750):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>750);
//将整型转换为字符型
itoa(grade,temp[1],10);
}
//联系方式
if(i==8)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//住址
if(i==9)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//专业编号限制
if(i==10)
{
do
{
printf("请输入%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该专业号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n专业号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//班号限制
if(i==11)
{
do
{
printf("请输入%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该班号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n班号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//寝室号限制
if(i==12)
{
do
{
printf("请输入%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该寝室号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=5)
{
printf("\n寝室号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入教师表
if(table==2)
{
//限制教师号
if(i==1)
{
do
{
printf("请输入%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该教师号已存在,请重新输入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).teacherhead==NULL)
{
printf("\n该教师号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n教师号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//姓名
if(i==2)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制性别
if(i==3)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%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("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制出生日期
if(i==5)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%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输入错误,请重新输入!\n\n");
}
printf("请输入%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输入错误,请重新输入!\n\n");
}
printf("请输入%s(0-30000):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>30000);
//将整型转换为字符型
itoa(grade,temp[1],10);
}
//院系号限制
if(i==8)
{
do
{
printf("请输入%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该院系号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n院系号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入课程表
if(table==3)
{
//限制课程号
if(i==1)
{
do
{
printf("请输入%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该课程号已存在,请重新输入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).coursehead==NULL)
{
printf("\n该课程号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=10)
{
printf("\n课程号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//课程名
if(i==2)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制讲课学时或实验学时
if(i==3)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%s(0-120):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>120);
//将整型转换为字符型
itoa(grade,temp[1],10);
}
//限制实验学时
if(i==4)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%s(0-120):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>120);
//将整型转换为字符型
itoa(grade,temp[1],10);
}
//限制学分
if(i==5)
{
do
{
if(flag==1)
{
printf("\n输入错误,请重新输入!\n\n");
}
printf("请输入%s(0-10):",row_txt[table][i]);
grade=Force();
flag=1;
}while(grade<0 ||grade>10);
//将整型转换为字符型
itoa(grade,temp[1],10);
}
//选用教材
if(i==6)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//院系号限制
if(i==7)
{
do
{
printf("请输入%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该院系号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n院系号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
}
//插入专业表
if(table==4)
{
//限制专业编号
if(i==1)
{
do
{
printf("请输入%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该专业号已存在,请重新输入!\n\n");
continue;
}
if(n[2]==2&&find(Find,temp[1],temp[1],all).specialityhead==NULL)
{
printf("\n该专业号不存在,请重新输入!\n\n");
continue;
}
if(strlen(temp[1])!=2)
{
printf("\n专业号位数错误,请重新输入!\n\n");
continue;
}
break;
}while(1);
}
//专业名
if(i==2)
{
printf("请输入%s:",row_txt[table][i]);
scanf("%s",temp[1]);
}
//限制创办年份
if(i==3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -