学生信息管理系统

读入文档未完成,是个败点
/******************************************************
  File name:学生信息管理系统     // 文件名
  Author:      Sno:1508010317  class:软工1503 
  Date:2017.3.19                // 作者及完成日期
  Description:   
  1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
  2.将功能补充完全(基于文件处理,完成刷新和保存功能)。
  3.将学生信息改为更好的数据组织,而非离散形式(结构体)。
  提高要求:
    可将程序中的不足(如数据验证)等根据自己的能力与理解完成。

  Function List:   // 主要函数及其功能  
  1、menu();                    //界面函数
  2、insert(STUDENTS t[]);      //输入函数
  3、list(STUDENTS t[],int n);  //显示函数
  4、search(STUDENTS t[],int n);//查询函数
  5、del(STUDENTS t[],int n);   //删除函数
  6、save(STUDENTS t[],int n);  //保存函数
  7、modify(STUDENTS t[],int n);//修改函数
  8、load(STUDENTS t[]);        //加载函数
  9、help();                    //帮助函数
  10、find_name(STUDENTS t[],int n,char *s); //姓名查找函数
  11、find_code(STUDENTS t[],int n,char *no);//学号查找函数
  12、sort(STUDENTS t[],int n);              //排序函数

  History:                  // 历史修改记录  
      <author>  <time>      <desc>  
               2017.3.19    增加加载函数失败
	                        不能实现读取文件信息
               2017.3.19    增加排序函数,成功实现
*************************************************/

#include <stdio.h>  /**I/O函数**/
#include <stdlib.h> /**标准库函数**/
#include <string.h> /**字符串函数**/
#define N 50        /**最大学生人数**/
typedef struct        
{
	char code[20];    /**学号**/
	char name[20];  /**姓名**/
	char sex[5];    /**性别**/
	int  age;       /**年龄**/
	float score0;   /**C语言成绩**/
    float score1;   /**高数成绩**/
    float score2;   /**英语成绩**/
} STUDENTS;/**定义数据结构**/

/*****以下所有函数******/
int  menu();                    /**界面函数**/
int  insert(STUDENTS t[]);      /**输入函数**/
void list(STUDENTS t[],int n);  /**显示函数**/
void search(STUDENTS t[],int n);/**查询函数**/
int  del(STUDENTS t[],int n);   /**删除函数**/
void save(STUDENTS t[],int n);  /**保存函数**/
void modify(STUDENTS t[],int n);/**修改函数**/
int  load(STUDENTS t[]);        /**加载函数**/
void help();                    /**帮助函数**/
int  find_name(STUDENTS t[],int n,char *s); /**姓名查找函数**/
int  find_code(STUDENTS t[],int n,char *no);/**学号查找函数**/
void sort(STUDENTS t[],int n);              /**排序函数**/

/********界面函数********/
int menu()
{
	int c;
	printf("  ******************************************************\n");
	printf("  *                学生信息管理系统                    *\n");
	printf("  ******************************************************\n"); 
	printf("  *******************系统功能菜单***********************\n");
	printf("     ---------------------- -------------------------   \n");
	printf("      *********************************************     \n");
	printf("      * 0.系统帮助及说明  * *  1.加载学生信息    *      \n");
	printf("      *********************************************     \n"); 
	printf("      * 2.查询学生信息    * *  3.修改学生信息    *      \n");
	printf("      *********************************************     \n");
	printf("      * 4.增加学生信息    * *  5.按学号删除信息  *      \n");
	printf("      *********************************************     \n");
	printf("      * 6.显示当前信息    * *  7.保存信息到文件  *      \n");
	printf("      *********************************************     \n");
	printf("      * 8.退出系统        * *  9.按学号排序      *      \n");
	printf("      *********************************************     \n");
	printf("     ---------------------- ------------------------    \n");
	do{
		printf("\n   输入您的菜单选项编号(0-9):");
		scanf("%d",&c);
	}while(c<0 || c>9);
	return c;
}

/********帮助函数********/
void help()
{ 
	system("cls");                     /**清屏**/	
	printf("\n0.欢迎使用系统帮助!\n");
	printf("\n1.初次进入系统后,请先选择 4 增加学生信息;\n");
	printf("\n2.按照菜单提示键入数字代号;\n");
	printf("\n3.增加学生信息后,切记按 7 保存;\n");
	printf("\n4.谢谢您的使用!\n");
	getchar();


} 

/*******增加函数********/
int insert(STUDENTS t[])
{
	int i,n;
	system("cls");/**清屏**/
	printf("\n 请输入待增加学生人数:\n");
	scanf("%d",&n);
	printf("请输入学生记录:\n");
	printf("学生学号    学生姓名  性别  年龄   C语言成绩  高等数学  大学英语成绩\n");
	printf("....................................................................\n");
	for(i=0;i<n;i++)
	{
		scanf("%s",t[i].code);        /**输入学号**/			
		scanf("%s",t[i].name);        /**输入姓名**/
		scanf("%s",t[i].sex);         /**输入性别**/
		scanf("%d",&t[i].age);        /**输入年龄**/			
		scanf("%f",&t[i].score0);     /**C语言成绩**/
		scanf("%f",&t[i].score1);     /**高数成绩**/	
		scanf("%f",&t[i].score2);     /**英语成绩**/
	}
	getchar();
	return n;        
}

/**查找函数**/
void search(STUDENTS t[],int n)
{


	char s[21];                        /**以姓名和学号最长长度+1为准**/
	system("cls");                     /**清屏**/
	int i,item;                         
	printf("----------------------\n");
	printf("-----1.按学号查询-----\n");
	printf("-----2.按姓名查询-----\n");
	printf("-----3.退出本菜单-----\n");
	printf("----------------------\n");
	while(1)
	{
		printf("请选择子菜单编号:");
		scanf("%d",&item);
		switch(item)
		{
		case 1:
			printf("请输入查找的学号:\n");       /**学号查找**/
			scanf("%s",s);
			getchar();
			i=find_code(t,n,s);                    /**将学号查找函数返回值赋给i**/
			if(i>n-1)
				printf("没有学号为%s的学生! \n",s);
			else
			
			{
				printf("学生学号    学生姓名  性别  年龄   C语言成绩  高等数学  大学英语成绩\n");	
				printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",			
					t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);
			}
			break;
		case 2:
			printf("请输入查找的姓名:\n");          /**姓名查找**/
			scanf("%s",s);
			getchar();
			i=find_name(t,n,s);                     /**将姓名查找函数返回值赋给i**/
			if(i>n-1)
				printf("没有姓名为%s的学生! \n",s);
			else
			{
				printf("学生学号    学生姓名  性别  年龄   C语言成绩  高等数学  大学英语成绩\n");
				printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",			
					t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);
			}
			break;
		case 3:return;                      /**返回界面函数**/
		default:printf("请在1-3之间选择\n");
		}
	}
}

/**按姓名查找函数,参数为学生数组和学生总数以及姓名s**/
int find_name(STUDENTS t[],int n,char *s)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(s,t[i].name)==0)     /**比较两者是否相等,相等则返回0**/
			return i;
	}
	return i;
}

/**按学号查找函数,参数为学生数组和学生总数以及学号no**/
int find_code(STUDENTS t[],int n,char *no)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(no,t[i].code)==0)    /**比较两者是否相等,相等则返回0**/
			return i;
	}
	return i;
}

/**修改学生信息函数**/
void modify(STUDENTS t[],int n)
{
	char s1[21];                     /**以姓名和学号最长长度+1为准**/
	int ch=0;
	int i,item;
	system("cls");                     /**清屏**/
	printf("请输入要修改的学生学号:\n");
	scanf("%s",s1);
	for(i=0;i<n;i++)
		if(strcmp(t[i].code,s1)!=0)
		{	
			printf("没有找到学号为%s的学生!\n",s1);
		}	
		else	
		{		
			printf("------------------\n");	
			printf("1.修改姓名\n");	
			printf("2.修改年龄\n");		
			printf("3.修改性别\n");		
			printf("4.修改C语言成绩\n");		
			printf("5.修改高等数学成绩\n");		
			printf("6.修改大学英语成绩\n");	
			printf("7.退出本菜单\n");	
			printf("------------------\n");		
			printf("学号为%s的学生修改前:\n",s1);		
			printf("学生学号    学生姓名  性别  年龄   C语言成绩  高等数学  大学英语成绩\n");		
			printf("%6s %7s %6s %6d %9.1f %10.1f %10.1f\n",						
				t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);	
			while(1)		
			{			
				printf("请选择子菜单编号:");		
				scanf("%d",&item);		
				switch(item)		
				{		
				case 1:			
					printf("请输入新的姓名:\n");	
					scanf("%s",t[i].name);			
					break;	
				case 2:			
					printf("请输入新的年龄:\n");			
					scanf("%d",&t[i].age);				
					break;		
				case 3:			
					printf("请输入新的性别:\n");			
					scanf("%s",t[i].sex);
					break;		
				case 4:			
					printf("请输入新的C语言成绩:\n");/**C语言成绩**/			
					scanf("%f",&t[i].score0); 			
					break;		
				case 5:			
					printf("请输入新的高等数学成绩:\n"); /**高数成绩**/			
					scanf("%f",&t[i].score1); 			
					break;			
				case 6:			
					printf("请输入新的大学英语成绩:\n");/**英语成绩**/			
					scanf("%f",&t[i].score2);
					break;
				case 7:	return;			
					getchar();		
				default:printf("请在1-7之间选择\n");		
				}		
			}
		}
}

/**删除函数,参数是结构体数组,记录数**/
int del(STUDENTS t[],int n)
{
	char s[21];
	int ch=0;
	int i;
	system("cls");                     /**清屏**/
	printf("请输入要删除的学生学号:\n");
	scanf("%s",s);
	getchar();
	i=find_code(t,n,s);
	if(i==n)
		printf("没有学号为%s的学生! \n",s);
	else
	{
		printf("正在删除中! \n");
		for(;i<n;i++)
		{
			strcpy(t[i].name,t[i+1].name);
			strcpy(t[i].code,t[i+1].code);
			strcpy(t[i].sex,t[i+1].sex);
			t[i].age=t[i+1].age;
			t[i].score0=t[i+1].score0;
			t[i].score1=t[i+1].score1;
			t[i].score2=t[i+1].score2;
		}
		n--;
		printf("删除成功! \n");
	}
	getchar();
	return n;
}

/**显示信息,参数为记录数组和总人数**/
void list(STUDENTS t[],int n)
{
	int i;
	system("cls");
	printf("****************************学生清单********************************\n");
	printf("学生学号    学生姓名  性别  年龄   C语言成绩  高等数学  大学英语成绩\n");
	printf("--------------------------------------------------------------------\n");
	for(i=0;i<n;i++)
	{
		printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",
			t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);
			
	}
	printf("--------------------------------------------------------------------\n");
	getchar();
}

/****保存函数,参数为结构体数组和总人数****/
void save(STUDENTS t[],int n)
{
	int i;
	FILE * fp ;                             /**指向文件的指针**/
	system("cls");
	if((fp=fopen("017.txt","w"))==NULL)     /**打开文件,并判断打开是否正常**/
	{
		printf("无法打开学生记录文件! \n"); /**打开失败**/
		exit(1);                            /**退出**/
	}
	printf("\n正在保存中\n");
	fprintf(fp,"%d",n);                     /**将记录数写入文件**/
	fprintf(fp,"\r\n");                     /**将换行符号写入文件**/
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%6s %10s %6s %6d %9.1f %10.1f %10.1f",
			t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);
		fprintf(fp,"\r\n");                 /**将换行符号写入文件**/
	}
	fclose(fp);                             /**关闭文件**/
	getchar();
	printf("--------保存成功---------\n");  /**显示保存成功**/
}

/**加载函数,读入参数,参数为结构体数组**/
int load(STUDENTS t[])
{
	int i,n;
	system("cls");
	FILE * fp;
	if((fp=fopen("017.txt","r"))==NULL) /**打开文件**/
	{
		printf("无法打开学生信息文件! \n");    /**打开失败**/
		exit(1);        /**退出**/
	}
	fscanf(fp,"%d",&n);     /**读入记录数**/
	for(i=0;i<n;i++)
	{/**按格式读入记录**/
		fscanf(fp,"%6s %10s %6s %6d %9.1f %10.1f %10.1f",
			t[i].code,t[i].name,t[i].sex,&t[i].age,&t[i].score0,&t[i].score1,&t[i].score2);
	}
	
	fclose(fp);                                    /**关闭文件**/
	printf("已经成功加载学生信息文件! \n");        /**显示保存成功**/
	getchar();
	return n;
}    

/**排序函数**/
void sort(STUDENTS t[],int n)
{
	int i,j,p1,p2,p3,p4;
	system("cls");
	STUDENTS temp;
	for(i=0;i<n-1;i++)
	{
		for(j=n-1;j>i;j--)
			if((strcmp(t[j-1].code,t[j].code))>0)   /**比较学号大小**/
			{
				/**交换学号**/
				strcpy(temp.code,t[j-1].code);      
				strcpy(t[j-1].code,t[j].code);
				strcpy(t[j].code,temp.code);


				/**交换姓名**/
				strcpy(temp.name,t[j-1].name);
				strcpy(t[j-1].name,t[j].name);
				strcpy(t[j].name,temp.name);


				/**交换性别**/
				strcpy(temp.sex,t[j-1].sex);
				strcpy(t[j-1].sex,t[j].sex);
				strcpy(t[j].sex,temp.sex);


				/**交换年龄**/
				p1=t[j-1].age;
				t[j-1].age=t[j].age;
				t[j].age=p1;


				/**交换C成绩**/
				p2=t[j-1].score0;
				t[j-1].score0=t[j].score0;
				t[j].score0=p2;


				/**交换高数成绩**/
				p3=t[j-1].score1;
				t[j-1].score1=t[j].score1;
				t[j].score1=p2;


				/**交换英语成绩**/
				p4=t[j-1].score2;
				t[j-1].score2=t[j].score2;
				t[j].score2=p2;
			}
	}
	printf("排序成功! \n");
	getchar();
}

/******主函数******/
int main()
{
	STUDENTS stu[N];                              /**定义结构体数组**/
	int length;                                   /**定义学号姓名等长度**/	
	for(;;)                                       /**无限循环**/
	{
		switch(menu())                            /**调用界面函数,返回值作为开关语句的条件**/
		{	
		case 0:help();break;                      /**显示操作步骤**/
		case 1:load(stu);break;                   /**加载到内存**/
		case 2:search(stu,length);break;          /**按姓名查找记录**/
		case 3:modify(stu,length);break;          /**按学号修改记录**/
		case 4:length=insert(stu);break;          /**输入记录**/
		case 5:length=del(stu,length);break;      /**按姓名删除记录**/
		case 6:list(stu,length);break;            /**显示全部记录**/
		case 7:save(stu,length);break;            /**保存文件**/
		case 8:exit(0);                           /**程序结束**/
		case 9:sort(stu,length);break;            /**排序**/
		}
		getchar();
		printf("按回车键返回主菜单...\n");        /**提示信息**/
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值