📄 main.cpp
字号:
save_record("________________________________________________________\n用户导出了全体学生信息的记录\n",
"导出时间:\n",
"\t\t\t>>>没有异常\n________________________________________________________\n",
get_time());
}/*if(check_str=='y' || check_str=='Y')*/
getchar();
printf("是否回主菜单(y/n) < >\b\b");
check_str=getchar();
if(check_str=='y' || check_str=='Y')
return OK;
else return EXIT;
}
/*功能函数:2*/
int function_2()
{
system("cls"); //清屏
system("title 学生信息查询界面"); //刷新界面名字
LinkList InsList(); //声明外文件中函数
//来自Link.cpp中的函数,初始化链表
void Start_List(LinkList L,ElementData data,int *Number); //声明外文件中的函数
//来自Link.cpp中的函数.拓补
//线性表
LinkList Fine_List_Num(LinkList L,char* num); //声明外文件中的函数
//来自Link.cpp中的函数.按
//学号查找函数
LinkList Fine_List_Name(LinkList L,char* name); //声明外文件中的函数
//来自Link.cpp中的函数.按
//姓名查找函数
char* get_time(); //时间获取函数声明
int yesno_3(int xuanzhe); //选择循环函数声明
void error_tuichu(int error); //不正常退出函数声明
void ok_tuichu(); // 正常退出函数声明
void get_ok_name(LinkList L1,char* input_name); //姓名条件学生链表输出的函数声明
int xuanzhe=3; //查询条件存放
int printf_count; //打印图形的变量,
FILE *fp; //文件指针
ElementData *L,*L1; //结构体数组指针
ElementData data,stu1; //结构体数组变量 (stu1 为测试变量,要DEL)
ElementData *L_name; //姓名符合条件的存放链表
char input_num[15]; //输入学号信息存放
char input_name[20]; //输入姓名信息存放
while(!yesno_3(xuanzhe))
{
a3: system("cls"); //清屏
system("title 学生信息查询界面"); //刷新界面名字
printf("\t\t\t ***欢迎您的使用***\n");
printf("\t\t\t***学 生 信 息 查 询***\n");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("本系统提供的查询格式:\n");
printf("1,按学号查询.\n\n");
printf("2,按姓名查询.\n\n");
printf("0,返回上级菜单\n\n");
/*........more.........*/
printf("____________________\n");
printf("请选择查询方式:");
scanf("%d",&xuanzhe);
}/*while(!yesno_3(xuanzhe))*/
if(0 == xuanzhe) //返回主菜单
return OK;
else if(1 == xuanzhe) {
/************************************************************
//数据写入测试代码
fp = fopen("d:\\student_data.txt","a");
scanf("%s",stu1.num);
scanf("%s",stu1.name);
scanf("%s",stu1.yuwen);
scanf("%s",stu1.shuxue);
scanf("%s",stu1.englise);
scanf("%s",stu1.cplus);
fwrite(&stu1,sizeof(stu1),1,fp);
fclose(fp);
***************************************************************/
//正式代码
printf("请输入该学生的学号:");
scanf("%s",input_num);
L = InsList(); //初始化线性表
fp = fopen("d:\\student_data.txt","r");
if(fp == NULL) error_tuichu(ERROR_2); //模仿异常的抛出
while(!feof(fp)) {
fread(&data,sizeof(ElementData),1,fp); //从文件读取data数据
Start_List(L,data,&Number); //文件中读出的数据压进动态链表
} /*while(!feof(fp))*/
fclose(fp);
//...........文件内容转为了链表,接下来好办了,嘿嘿.............
L1 = L->next; //为L1赋值,对L1操作
while(L1->next != NULL) {
L1 = L1->next;
if((0 == strcmp(L1->num,input_num)) && (strlen(L1->num)==strlen(input_num)))
{
printf("\n已经找到该学生,现在正在打印信息,请稍后....\n");
printf("学号为 %s 的学生的信息如下:\n",input_num);
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf(" 学号\t 姓名\t 性 别\t 手机\t 短号\t 系别\n");
printf("%s %s\t %s\t %s\t%s\t %s\n",L1->num,L1->name,L1->yuwen,
L1->shuxue,L1->englise,L1->cplus);
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf("请查看,如果看完,请按键退出,回到上一级菜单...\n");
system("pause");
save_record("________________________________________________________\n用户查询了学号为: \"",
input_num,
"________________________________________________________\n",
"\" 的学生,数据库中 \"存在\" 此学生.\n");
L = InsList(); //重新刷新链表
Number = 0; //链表计数器回0
goto a3; //回上一级菜单
break;
}
else {
continue;
} /*else if(L1 !=NULL)*/
} /*while(L1 != NULL) */
//..........................内容查找完毕...............................
//如果运行到此,则表示没有找到符合条件的学生,直接提示信息,并提示返回..
printf("\n对 不 起,学号为 \"%s\" 的学生没有找到.\n",input_num);
printf("您可以在主菜单中添加此学生的信息.\n");
printf("请按键返回上级菜单...\n");
L = InsList(); //重新刷新链表
system("pause");
save_record("________________________________________________________\n用户查询了学号为: \"",
input_num,
"________________________________________________________\n",
"\" 的学生,数据库中 \"不存在\" 此学生.\n");
goto a3;
}/* else if(1 == xuanzhe) */
else if(2 == xuanzhe) {
/****************************************************************
//数据输入测试代码
fp = fopen("d:\\student_data.txt","r");
fread(&stu1,sizeof(stu1),1,fp);
printf("%s %s %s %s %s %s\n",stu1.num,stu1.name,stu1.yuwen,stu1.shuxue,stu1.englise,stu1.cplus);
fclose(fp);
system("pause");
*****************************************************************/
//正式代码
printf("请输入该学生的姓名:");
scanf("%s",input_name);
L = InsList(); //初始化线性表
L_name =InsList(); //初始化姓名条件线性表
fp = fopen("d:\\student_data.txt","rb");
if(fp == NULL) error_tuichu(ERROR_2); //模仿异常的抛出
while(!feof(fp)) {
fread(&data,sizeof(ElementData),1,fp); //从文件读取data数据
Start_List(L,data,&Number); //文件中读出的数据压进动态链表
} /*while(!feof(fp))*/
fclose(fp);
//...........文件内容转为了链表,接下来好办了,嘿嘿.............
L1=L->next;
while(L1->next!= NULL) {
L1 = L1->next;
if((0 == strcmp(L1->name,input_name)) && strlen(L1->name)==strlen(input_name)) //如果条件符合,则把该信息转存在
//学生学生名字链表
{
strcpy(data.num, L1->num);
strcpy(data.name, L1->name);
strcpy(data.yuwen, L1->yuwen);
strcpy(data.shuxue, L1->shuxue);
strcpy(data.englise, L1->englise);
strcpy(data.cplus, L1->cplus);
data.next =L1->next;
Start_List(L_name,data,&Number); //符合条件的放进去
}/*if((0 == strcmp(L1->name,input_name)))*/
else {
continue;
} /*else if(L1 !=NULL)*/
} /*while(L1 != NULL) */
//..........................内容查找完毕...............................
if(L_name ->next != NULL) {
//如果执行此语句,则找到学生数据元素,对元素进行处理...................
L_name = L_name->next;
printf("\n已经找到该学生,现在正在打印信息,请稍后....\n");
printf("姓名为 \"%s\" 的学生的信息如下:\n",input_name);
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf(" 学号\t 姓名\t 性 别\t 手机\t 短号\t 系别\n");
while(L_name !=NULL) {
get_ok_name(L_name,input_name); //打印 数据项
L_name = L_name->next; //链表下移
} /*while(L_name !=NULL)*/
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf("请查看,如果看完,请按键退出,回到上一级菜单...\n");
system("pause");
save_record("________________________________________________________\n用户查询了姓名为: \"",
input_name,
"________________________________________________________\n",
"\" 的学生,数据库中 \"存在\" 此学生.\n");
L_name = InsList(); //重新刷新学生条件链表
L = InsList(); //重新涮新链表
Number = 0; //链表计数器回0
goto a3; //回上一级菜单
} /*if(L_name ->next != NULL)*/
//如果运行到此,则表示没有找到符合条件的学生,直接提示信息,并提示返回..
printf("\n对 不 起,姓名为 \"%s\" 的学生没有找到.\n",input_name);
printf("您可以在主菜单中添加此学生的信息.\n");
printf("请按键返回上级菜单...\n");
L = InsList(); //重新刷新链表
system("pause");
save_record("________________________________________________________\n用户查询了姓名为: \"",
input_name,
"________________________________________________________\n",
"\" 的学生,数据库中 \"不存在\" 此学生.\n");
goto a3;
}/*else if(2 == xuanzhe)*/
return OK;
}
/*功能函数3:在数据库中修改特定学生的信息.*/
int function_3()
{
system("cls"); //清屏
system("title 学生信息修改界面"); //刷新界面名字
//......................函数声明部分................................
char* get_time(); //时间函数函数
int yesno_3(int xuanzhe); //次级界面循环函数
LinkList InsList(); //声明外文件中函数
//来自Link.cpp中的函数,初始化链表
void Start_List(LinkList L,ElementData data,int *Number); //声明外文件中的函数
//来自Link.cpp中的函数.拓补
//线性表
LinkList Fine_List_Num(LinkList L,char* num); //声明外文件中的函数
//来自Link.cpp中的函数.按
//学号查找函数
LinkList Fine_List_Name(LinkList L,char* name); //声明外文件中的函数
//来自Link.cpp中的函数.按
//姓名查找函数
void error_tuichu(int error); //不正常退出函数声明
//..................................................................
//......................变量声明部分................................
int xuanzhe=3; //功能选择变量
FILE *fp; //文件操作指针
ElementData data,data_check; //数据元素暂存变量
LinkList L,L1,L2,L_new,L_check; //链表指针
char input_str[20]; //删除标志存放
char check_str[20]; //检查标志
//..................................................................
while(!yesno_3(xuanzhe))
{
a3: system("cls"); //清屏
system("title 学生信息修改界面"); //刷新界面名字
printf("\t\t\t ***欢迎您的使用***\n");
printf("\t\t\t***学 生 信 息 修 改***\n");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("本系统提供的修改格式:\n");
printf("1,添加一个学信息.\n\n");
printf("2,删除一个学生信息.\n\n");
printf("0,返回上级菜单\n\n");
/*........more.........*/
printf("____________________\n");
printf("请选择修改方式:");
scanf("%d",&xuanzhe);
}/*while(!yesno_3(xuanzhe))*/
//...............已经选择了正确的功能.................................
if(0 == xuanzhe) {
return OK;
}/*if(0 == xuanzhe)*/
else if(1 == xuanzhe) {
//..........选择1,添加一个学生信息............................
printf("请输入要添加的学生信息.\n");
printf("______________________________\n");
getchar();
printf("学号:");
gets(data.num);
printf("姓名:");
gets(data.name);
printf("性别:");
gets(data.yuwen);
printf("手机:");
gets(data.shuxue);
printf("短号:");
gets(data.englise);
printf("系别:");
gets(data.cplus);
data.next =NULL;
strcpy(check_str,data.num);
//....................唯一性检查...........................
fp = fopen("d:\\student_data.txt","r");
L_check = InsList();
while(!feof(fp)) {
fread(&data_check,sizeof(ElementData),1,fp);
Start_List(L_check,data_check,&Number);
}/*while(!feof(fp))*/
fclose(fp);
if((int)Fine_List_Num(L_check,check_str)) {
printf("\a您刚才输入的数据与数据库中的数据存在重名!不允许..\n");
printf("\n请按键返回");
system("pause");
goto a3;
free(L_check);
}/*if(Fine_List_Num(L_check,check_str)) */
//.........................................................
//..................学号合法性检查.........................
char *pstr;
int *pint;
pint = new int(0); //用了一个C++new/delete配对的语句,也是本程序唯一使用的
pstr = check_str;
for(; *pstr; pstr++) {
if(!(*pstr>='0' && *pstr<='9')) {
printf("\a您刚才输入的 \"学号\" 中含有非法字符,不允许!\n");
*pint = 1;
break;
}/*如果学号不合法*/
}/*for(; *pstr; pstr++)*/
strcpy(check_str,data.shuxue);
pstr = check_str;
for(; *pstr; pstr++) {
if(!(*pstr>='0' && *pstr<='9')) {
printf("\a您刚才输入的 \"手机号\" 中含有非法字符,不允许!\n");
*pint = 1;
break;
}/*如果手机号不合法*/
}/*for(; *pstr; pstr++)*/
strcpy(check_str,data.englise);
pstr = check_str;
for(; *pstr; pstr++) {
if(!(*pstr>='0' && *pstr<='9')) {
printf("\a您刚才输入的 \"集群网短号\" 中含有非法字符,不允许!\n");
*pint = 1;
break;
}/*如果集群网短号不合法*/
}/*for(; *pstr; pstr++)*/
if(*pint)
{
printf("\n请按键返回\n");
system("pause");
goto a3;
}
delete pint;
//.........................................................
fp = fopen("d:\\student_data.txt","a");
if(fp == NULL) error_tuichu(ERROR_2);
fwrite(&data,sizeof(ElementData),1,fp);
fclose(fp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -