📄 main.cpp
字号:
/***************************************************************
V2.1正式版 主要代码
written by BHR
2008年11月7日0:33:18
****************************************************************/
#include <stdio.h>
#include <windows.h>
#include "def.h"
#include "c_to_d.h"
#include <time.h>
#include "struct_stu.h"
typedef struct stu ElementData; //typedef定义
typedef struct stu* LinkList; //typedef定义
int Number=0; //学生元素计数器
void save_record(char *Str_Information1,char *Str_Information2,char *Str_Information3,char *Str_Time);//记录打印函数
void main()
{
system("title 学生信息管理系统");
char * get_time(); //获得时间
void start(); //开始界面函数
void menu(); //菜单界面函数
void ok_tuichu(); // 正常退出界面函数
void error_tuichu(int error); //不正常退出界面函数
start();
menu();
}
/*定义开始界面函数*/
void start()
{
void zifu(); //声明字符函数接口
void dongtai(); //动态显示
char a;
printf("\t\t\t\t欢迎使用\n");
zifu();
printf("请按任意键,以载入系统...\n");
a=getchar();
dongtai();
}
/*菜单界面函数*/
void menu()
{
system("cls");
system("title 登陆");
void error_tuichu(int error); //不正常退出界面函数
void ok_tuichu(); // 正常退出函数
int question_pw(); //获取密码提示
int check_pw(char *str); //密码验证函数
char * get_time(); //获得时间函数
int yesno(int xuanzhe); //功能选择函数
void function_0(); //菜单功能函数
int function_1(); //菜单功能函数
int function_2(); //菜单功能函数
int function_3(); //菜单功能函数
int function_4(); //菜单功能函数
int function_5(); //菜单功能函数
int function_6(); //菜单功能函数
/*...more...添加更多功能接口*/
char str[20];
int chishu=10;
int xuanzhe=-1; //初始化成负一,以便yesno函数的第一次识别
printf("\t\t\t ***欢迎您的使用***\n");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("本系统要求密码验证,请输入密码以继续(9位):");
a1: gets(str);
if(! check_pw(str)){
system("cls");
system("title 功能菜单界面");
if(chishu<=1){
printf("多次输入密码错误,请退出...\n");
error_tuichu(ERROR);
}
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("输入密码错误,请重新输入,还有 %d 次机会\n>>",chishu = chishu-1);
goto a1;
}/*if(! check_pw(str))*/
/*如果执行到这里,说明PW正确...*/
save_record("****************************************************************\n\t\t\t用户成功登陆系统\n",
"\t\t\t\t登陆时间:",
"",
get_time());
system("cls");
system("title 登陆中....");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("\n密码获得确认,登陆中,请稍候......\n");
Sleep(800); //延时函数,让进程睡五秒钟
system("cls");
printf("");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
printf("\n登陆成功,正在生成主界面...\n");
Sleep(500); //延时函数,让进程睡两秒
system("cls");
while(!(yesno(xuanzhe)))
{
a2: 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("1,数据库中学生信息输出.\n\n");
printf("2,在数据库中查找特定学生.\n\n");
printf("3,在数据库中修改特定学生的信息.\n\n");
printf("4,管理系统操作记录查看.\n\n");
printf("5,PassWord 修改.\n\n");
printf("6,查看该系统发行文档.\n\n");
printf("0,退出本系统.\n\n");
printf("_______________________\n");
printf("请选择功能< >\b\b");
scanf("%d",&xuanzhe);
switch(xuanzhe)
{
case 0: function_0();
break;
case 1: if(function_1())
goto a2;
else ok_tuichu();
break;
case 2: if(function_2())
goto a2;
else ok_tuichu();
break;
case 3: if(function_3())
goto a2;
else ok_tuichu();
break;
case 4: if(function_4())
goto a2;
else ok_tuichu();
break;
case 5: if(function_5())
goto a2;
else ok_tuichu();
break;
case 6: if(function_6())
goto a2;
else ok_tuichu();
break;
/*......more......hehe...功能增加,在这里添加*/
/*注意在此添加后,要修改yesno的实现部分.否则执行时将*/
/*视新增加的命令为无效命令*/
}
}
}
/*密码效验函数*/
int check_pw(char *str)
{
void error_tuichu(int error); //不正常退出界面函数
FILE *fp; //ID文件操作指针
char flag[10]; //密码转换后的存放地点
char flag_[10]; //正确密码存放点
int i;
fp = fopen("d:\\id.txt","rb");
if(fp==NULL)
error_tuichu(ERROR_4); //如果打开失败,则抛出失败信息,让error_tuichu函数处理
if(strlen(str) !=9) /*位数效验*/
return ERROR;
for(i=0;i<9;i++) /*字符较验*/
if(!(
str[i]>='0'
&& str[i]<='9'
))
return ERROR;
/*字符格式符合要求,进入判断*/
for(i=0;i<9;i++){ //转换成符合要求的对比规则
flag[i] = str[i]+i; /*加密规则:ASCII + i*/
/* printf("flag:%c \n",flag[i]);*/ //编程检测行
/*printf("%d ",flag[i]);*/ //编程检测行
}
/*写系统时用的临时代码,以生成ID文件*/
/*
fp= fopen("d:\\id.txt","wb");
fwrite(&flag[0],sizeof(char),9,fp);
fclose(fp);
return OK;
*/
fread(&flag_[0],sizeof(char),9,fp); //取出密码
fclose(fp);
/**************************************
//检测行
for(i=0;i<9;i++){
printf("flag_:%c ",flag_[i]);
printf("flag: %c \n",flag[i]);
}
****************************************/
for(i=0;i<9;i++){ //对比
if(flag[i] == flag_[i])
continue;
else break;
}
/*
//检测行
printf("%d ",i);
*/
if(i==9) {return OK;}
return ERROR;
}
/*简单时间获取函数*/
char * get_time()
{
time_t start;
char time_str[30];
start = time(NULL);
return ctime(&start);
}
/*功能循环函数*/
int yesno(int xuanzhe)
{
if(xuanzhe>=0 && xuanzhe<=6)
return OK;
else
return ERROR;
}
/*功能循环函数2*/
int yesno_3(int xuanzhe)
{
if(xuanzhe>=0 && xuanzhe<=2)
return OK;
else
return EXIT;
}
/*功能函数:0*/
void function_0()
{
void ok_tuichu();
ok_tuichu();
}
/*功能函数:1*/
int function_1()
{
system("cls"); //清屏
system("title 学生信输出界面"); //刷新界面名字
printf("\t\t\t ***欢迎您的使用***\n");
printf("\t\t\t***学 生 信 息 输 出***\n");
printf("\t\t\t\t\tnow time: %s",get_time()); /*通用时间获取语句*/
//...........................函数声明........................................
LinkList InsList(); //声明外文件中函数
//来自Link.cpp中的函数,初始化链表
void Start_List(LinkList L,ElementData data,int *Number); //声明外文件中的函数
//来自Link.cpp中的函数.拓补
//线性表
void error_tuichu(int error); //不正常退出函数声明
void get_ok_name(LinkList L1,char* input_name); //打印声明
//...........................................................................
//...........................变量声明........................................
char check_str; //用户选择是否循环
ElementData data,*L,*L1,*L2; //学生元素相关变量
FILE *fp; //文件指针
int printf_count=0; //循环打印变量
char input_name[3]; //相关变量
char input_add[50]; //导出可视化文本地址
//...........................................................................
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);
//............排序........
for(L1 = L->next->next; L1->next !=NULL; L1 = L1->next) {
for(L2 = L1; L2!= NULL; L2 = L2->next){
if(c_to_d(L2->num) < c_to_d(L1->num))
{
strcpy(data.num,L1->num);
strcpy(L1->num,L2->num);
strcpy(L2->num,data.num);
strcpy(data.name,L1->name);
strcpy(L1->name,L2->name);
strcpy(L2->name,data.name);
strcpy(data.yuwen,L1->yuwen);
strcpy(L1->yuwen,L2->yuwen);
strcpy(L2->yuwen,data.yuwen);
strcpy(data.shuxue,L1->shuxue);
strcpy(L1->shuxue,L2->shuxue);
strcpy(L2->shuxue,data.shuxue);
strcpy(data.englise,L1->englise);
strcpy(L1->englise,L2->englise);
strcpy(L2->englise,data.englise);
strcpy(data.cplus,L1->cplus);
strcpy(L1->cplus,L2->cplus);
strcpy(L2->cplus,data.cplus);
}/*if('j'>'i')*/
}/*for(j=i;j<List_Num;j++)*/
}/*for(i=0;i<List_Num-1;i++)*/
//........................
free(L2);
L1 = L->next; L1 = L1->next;
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf(" 学号\t 姓名\t 性 别\t 手机\t 短号\t 系别\n");
while(L1!=NULL) {
get_ok_name(L1,input_name); //打印 数据项
L1 = L1->next; //链表下移
} /*while(L_name !=NULL)*/
for(printf_count =0; printf_count<80;printf_count++) printf("_"); printf("\n");
printf("学生信息输出完毕,请查看....\n");
save_record("________________________________________________________\n用户使用了全体学生信息输出功能\n",
"使用时间:" ,
"\t\t\t>>>没有异常\n________________________________________________________\n",
get_time());
getchar();
printf("是否将该记录导出(y/n) < >\b\b");
check_str=getchar();
if(check_str=='y' || check_str=='Y')
{
L1 = L->next;
L1 = L1->next;
printf("请输入文本存放地址及文本名:");
scanf("%s",input_add);
fp = fopen(input_add,"w");
if(NULL == fp) error_tuichu(ERROR_1); //模仿异常抛出
fprintf(fp,"%s","\t\t\t***学生信息***\n");
fprintf(fp,"%s%s%s","\t\t\t\t保存时间: ",get_time(),
"______________________________________________________________________\n");
fprintf(fp," 学号\t 姓名\t 性 别\t 手机\t 短号\t 系别\n");
printf_count=0;
while(L1!= NULL) {
printf_count++;
fprintf(fp,"%s %s\t %s\t %s\t%s\t %s\n",L1->num,L1->name,L1->yuwen,
L1->shuxue,L1->englise,L1->cplus);
L1 = L1 ->next;
} /*while(L1 != NULL)*/
fprintf(fp,"______________________________________________________________________\n");
fprintf(fp,"\t\t\t\t\t-->>>完 毕,共 %d 条记录\n",printf_count);
fprintf(fp,"\t\t学生信息存储系统 V 2.1 正式版 by BHR");
fclose(fp);
free(L);
free(L1);
printf("导出成功,记录存放于 \"%s\" 中.\n",input_add);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -