⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 学生信息管理系统
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -