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

📄 kao7.cpp

📁 学生信息管理系统,功能不是很多,不过还行,能用了,
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>              //提供字符串比较函数:strcmp()
#include<fstream.h>             //文件控制头函数
//*********************学生成绩信息定义**************************
typedef struct  examine
{
	float math;
	float english;
	float suanfa;
	float huibian;
	float dianlu;
	float tiyu;
	float pingjun;
	float total;
}Exam;
//**********************学生课程信息定义**************************
typedef struct course
{
	char mon1[10],mon2[10],mon3[10],mon4[10],mon5[10];
	char tues1[10],tues2[10],tues3[10],tues4[10],tues5[10];
	char wed1[10],wed2[10],wed3[10],wed4[10],wed5[10];
	char thur1[10],thur2[10],thur3[10],thur4[10],thur5[10];
	char fri1[10],fri2[10],fri3[10],fri4[10],fri5[10];
}Cour;
//*********************学生学籍信息定义**************************
typedef struct stud
{
	long xuehao;
	char name[10];
	char sex[5];
	char xibie[10];  
	char banji[10];
	char address[40];
	char tel[10];
	char sushe[10];
	Exam chengji;        //内嵌声明成绩信息结构体
	Cour kecheng;       //内嵌声明课程信息结构体
	struct stud * next;
}Stud;
Stud *head;           //定义链表头结点指针(全局变量)
Stud *r,*R,*w;        //定义从链表任意段控制输出的指针(全局变量)
FILE *fi1,*fi2;      //声明文件操作变量指针(全局变量)
//******************************函数声明部分***************************************
void caidan();     //
void caidan1();
void caidan2();
void caidan3();
void caidan4();
void caidan5();
void caidan6();    //六个菜单函数

void xuehaoDel(long x);      //按学号删除函数
void nameDel(char x[]);      //按姓名删除函数
void shuru();                //输入基本信息和成绩函数
void shuru1();               //输入课表信息函数
void inser(long b);          //录入,插入新学生信息函数

void print();       //        
void print2();
void print3();
void print4();    //四个控制打印信息函数

void output();
void output1();
void output2();    //三类信息的打印函数

void paixu();               //按学号排序函数
void paixu1();              //按考试成绩排序函数
void find(long b);          //按学号查找函数
void find1(char b[10]);     //按姓名查找函数
void open();                //打开信息库文件输出信息函数
void close();               //保存信息到信息库文件函数
void gengxin(long b);       //更新学生信息函数
int  tongji();              //统计学生信息个数函数
//*********************主函数定义************************** 
void main()                                     //主函数开始
{ 
    char name[10]; 
    int choose,choose1,n,menu=1;  //定义三个控制循环的变量
	long m;		  //定义用来做学号查询的变量
	open();       //打开信息库文件载入学生信息      
    do            //循环操作控制
    {  
	   if(menu==1)           //判断是否重新显示主菜单
		   caidan();         //调用功能菜单函数,显示菜单项。
	   menu=1;           //默认从个子功能模块跳出后自动显示主菜单 
	   printf("请选择>>");
       scanf("%ld",&choose); 
       switch(choose) 
	   {
        case 1:             //进入录入,插入新学生信息功能模块
			system("cls");   //自动清屏函数(系统提供)
			caidan3();      //调用子菜单
			do           //连续插入新信息循环控制
			{
	        printf("请输入新学生学号:\n"); 
	        scanf("%ld",&m); 
	        inser(m);           //调用插入新的学生信息的函数;
	        print();	     //显示插入的新学生信息
			printf("\n继续插入请输入1返回总菜单输入0:");
			scanf("%d",&m);
			}while(m==1);
			system("cls");   //自动清屏函数(系统提供)
			break; 
		case 2:            //进入按学号升序排序输出信息功能模块
			system("cls");   ////自动清屏函数(系统提供)
			caidan4();	    //调用输出哪类信息子菜单
			n=tongji();	    //调用统计函数	
			paixu();      //调用按学号排序函数
			do           //控制,实现循环查询功能
			{
			printf("\n请选择>>");
			scanf("%d",&choose1);
			switch(choose1)
			{
			case 1:
				printf("一共有%d个学生,信息如下:\n",n);	   
				print2(); //调用打印学生基本信息函数
	            break; 
			case 2:   
				printf("一共有%d个学生,成绩信息如下:\n",n);	   
				print3();        //调用打印学生成绩信息函数
				break; 
			case 3:
				printf("一共有%d个学生,信息如下:\n",n);	  
				print4();      //调用打印学生课程信息函数
				break;
			default: 
			    printf("\n选择错误,请重新选择!\n"); 
                break;	
			}	
			}while(choose1!=0);
			system("cls");//自动清屏函数(系统提供) 
            menu=1;
            break;
		case 3:	          //进入学生考试成绩排名功能模块
			n=tongji();	   //调用统计函数   
			printf("一共有%d个学生,分数从高到低排列如下:\n",n);	   
			paixu1();       //调用成绩排名函数
			print3();       //调用打印学生成绩函数
		    menu=0;         //控制跳出后不必再显示主菜单
			break;
		case 4:              //进入查询学生信息功能模块
            system("cls");   ////自动清屏函数(系统提供)		
			do           // 控制循环查询信息
			{
			caidan1();      //调用查询功能子菜单
			printf("\n请选择>>");
			scanf("%d",&choose1);
			switch(choose1)
			{
			case 1:           //按学号查询信息
				do        //控制循环查询
				{
				printf("请输入你要查找的学号:"); 
                scanf("%ld",&m); 
                find(m);            //调用按学号查询信息函数
				printf("\n继续查找请输入1:\n返回上级菜单输入0:\n");
			    scanf("%d",&m);
				}while(m==1);
				system("cls");      ////自动清屏函数(系统提供)
	            break; 
			case 2:       //按姓名查询信息 
				do        //控制循环查询
				{
		        printf("请输入你要查找的姓名:"); 
                scanf("%s",name); 
                find1(name);        //调用按姓名查询学生信息函数
				printf("\n继续查找请输入1\n返回上级菜单输入0:\n");
			    scanf("%d",&m);    
				}while(m==1);
				system("cls");  ////自动清屏函数(系统提供)
	            break; 
			default: 
			    printf("\n选择错误,请重新选择!\n"); 
                break;	
			}
			}while(choose1!=0);
			system("cls");       ////自动清屏函数(系统提供)	
			break;
		case 5:         //进入统计学生信息个数功能模块
			n=tongji();    //调用统计个数函数
			printf("数据库中一共有%d个学生信息.\n",n);
			printf("\n");
			menu=0;     //控制跳出后不必再显示主菜单
			break; 
		case 6:	     //进入更新信息功能模块
			system("cls");   ////自动清屏函数(系统提供)
			caidan6();   //调用更新功能子菜单函数
			do     // 控制循环更新修改学生信息
			{  
				printf("\n\n请输入要更新修改信息的学生学号:");
		        scanf("%ld",&m);
			    gengxin(m);   //调用更新信息函数
			    printf("\n继续更新请输入1返回总菜单输入0:");
		        scanf("%d",&m);
		     	menu=1;    //控制跳出后重新显示主菜单
			}while(m==1);
			system("cls");   ////自动清屏函数(系统提供)
	        break; 
		case 7:      //进入删除学生信息功能模块
		    system("cls");  ////自动清屏函数(系统提供)
			caidan2();     //调用删除信息子菜单   
			do          //控制循环删除信息
			{
			printf("\n请选择>>");
			scanf("%d",&choose1);
			switch(choose1)
			{
			case 1:      //按学号删除信息
				do         //控制循环按学号删除信息
				{
				printf("请输入要删除的学生学号:");
				scanf("%ld",&m);
			    xuehaoDel(m);      //调用按学号删除信息函数
			    printf("\n继续删除请输入1\n返回总菜单输入0:");
			    scanf("%d",&m);
				}while(m==1);
				system("cls");  ////自动清屏函数(系统提供)
	            break; 
			case 2:	      //按姓名删除信息
				do       //控制循环按姓名删除
				{
				printf("请输入要删除的学生姓名:");
				scanf("%s",name);
				nameDel(name);         //调用按姓名删除信息函数
		    	printf("\n继续删除请输入1\n返回总菜单输入0:");
			    scanf("%d",&m);
				}while(m==1);
				system("cls");       ////自动清屏函数(系统提供)
	            break;
			case 3:     //全部删除信息
				printf("确定全部删除请输入:1  (删除后再保存将不能恢复!)\n放弃删除请输入:0\n");
				scanf("%d",&choose1);
				if(choose1==1)
				{
					head->next=NULL;
				    printf("\n全部删除成功!");
				}
				break;
		    default: 
			    printf("\n选择错误,请重新选择!\n"); 
                break;	
			}
			}while(choose1!=0);
			system("cls");  ////自动清屏函数(系统提供)
			break;
        default: 
			printf("\n选择错误,请重新选择!\n"); 
            break;
	   }
	}while(choose!=0);
	close();     //调用保存信息进库文件函数
	printf("\n *** !数据保存成功! ***\n"); 
    printf("感谢使用!请按任意键退出!\n");  //**********************结束程序运行!
}

//******************************插入函数************************************
void inser(long b) 
{ 	
	Stud *q;
	q=head->next;	
	while(q!=NULL&&b!=q->xuehao)   //检查是否存已在该同学
		q=q->next; 
	r=q;
	if(!q)                       //如果还没存在该同学就添加进信息库
	{	
		r=head;
		while(r->next!=NULL)    //找到链表的尾结点
			r=r->next;
		while(b>0)
		{
			R=(Stud *)malloc(sizeof(Stud));     //申请一个新结点
			R->xuehao=b; 
			shuru();           //调用输入信息函数
	        R->next=NULL; 
            r->next=R; 
	        r=r->next;
		    b=-1;          //控制循环
		    printf("!插入成功!具体信息如下:\n");	
		}
	}
	else 
		printf("信息库中已存在该同学!\n");	

} 
//***************************输出单条信息*******************************************
void print() 
{ 
	w=r;
	if(w!=NULL)
	{ 
	    printf("\n学号      姓名      性别      系别      班级      宿舍     电话     家庭地址 \n");
		output();   //调用输出学籍基本信息函数
		printf("\n考试成绩:  高数    英语    算法    汇编    电路    体育    总分    平均分 \n");
		printf("           ");
		output1();     //调用输出成绩信息函数
		printf("\n\n课表信息:  星期一       星期二       星期三       星期四       星期五\n");
		output2();      //调用输出课表信息函数
	} 
	printf("\n"); 
} 
//****************************输出全部信息**********************************
void print2() 
{ 
	Stud *q=head; 
	printf("\n学号      姓名      性别      系别      班级      宿舍     电话       家庭地址 \n"); 
	w=head->next;
	while (w!=NULL)
	{	 
		output();             //调用输出学籍基本信息函数
		w=w->next;           //指向下一个结点准备输出下一个同学的信息
	}
	printf("\n"); 
} 
//****************************输出成绩信息*************************************
void print3() 
{  
	printf("\n学号  姓名   班级   高数   英语    算法    汇编    电路    体育    总分   平均分 \n"); 
	w=head->next;
	while (w!=NULL)
	{
		printf("%-6ld%-6s %-4s  ",w->xuehao,w->name,w->banji);
		output1();//调用输出成绩信息函数
		printf("\n");
		w=w->next;            //指向下一个结点准备输出下一个同学的信息
	}
	printf("\n"); 
}
//*****************************输出课表信息****************************************
void print4() 
{ 
	w=head->next;
	while (w!=NULL)
	{	printf("\n学号: %ld     姓名: %s     班级:%s\n",w->xuehao,w->name,w->banji);
	    printf("\n课表信息:  星期一       星期二       星期三       星期四       星期五\n");
		output2();              //调用输出课表信息函数
		printf("\n");
		w=w->next;          //指向下一个结点准备输出下一个同学的信息
	}
	printf("\n"); 
}
//****************************按学号升序排序****************************************
void paixu()                                     //按学号排序
{
	Stud *H,*L,*P;
    int i,j,flag,n;
	n=tongji();          //调用统计个数函数
    for(i=0;i<n-1;i++)
	{
		flag=0;         //退出控制符
		H=head;          
		L=H->next;
		P=L->next;
		for(j=1;j<n-i;j++)
		{
			if(L->xuehao>P->xuehao)    //如果当前结点同学学号大于下个结点学号则通过指针调换前后顺序
			{
				H->next=P;
				L->next=P->next;  
				P->next=L;
				flag=flag+1;
			}	
			H=H->next;
		    L=H->next;
		    P=L->next;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -