学习之学籍管理系统

发布于:2023-07-04 ⋅ 阅读:(120) ⋅ 点赞:(0)

(一)要求:设计一个简单的学籍管理系统,包括的学生信息为:学号、姓名、年龄、C语言成绩。假设该班级学生10人,能够实现以下功能:

(1)输入10名学生的基本信息;

(2)输出10名学生的基本信息;

(3)输入学号/姓名,输出该学生的基本信息。

(4)c语言程序成绩降序排序;

(5)统计优、良、不及格的学生。

(二)数据结构分析 :

10名学生的学号、年龄、C语言成绩可分别用长度为10的一位数组sno(long int) 、sage(int)、cs(float)存储,10 名学生的姓名可以用长度为20个字符的一围数组,即字符型二维数组sname存储。

(三)算法分析

该系统主要可以由6个主要模块构成:输入学生的基本信息,输出学生的基本信息,查找学生的基本信息,排序,统计,退出。

(四)各模块的具体实现:

a. 输入学生的基本信息input

void input (unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int i;
	//输入N个学生的基本信息
	printf("请输入%d个学生的基本信息.\n",N);
	for( i=0; i<N; i++)
	{
		printf("\n输入第%d个学生的\n",i+1);
		
		printf("学号:");
		scanf("%lu",&sno[i]);
		
		//getchar();
		
		printf("姓名:");
		//gets(sname[i]);
		scanf("%s",&sname[i]);
		
		printf("年龄:");
		scanf("%d",&sage[i]);
		
		printf("成绩:");
		scanf("%f",&cs[i]);
	} 
}
 b.输出学生信息函数 output

void output(unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int i;
	//输出i个学生的基本信息
	printf("\n%d个学生的基本信息为\n",N);
	for( i=0; i<N; i++)
	{
		printf("%-10lu",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
	}
}


c.查找学生信息函数:两种方式,按学号查找和按姓名查找,对应函数snofind,snamefind

void snofind(unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int i;
	unsigned long snol;
	//按学号查找
	printf("请输入您要查找的学号:");
	scanf("%lu",&snol);
	
	for(i=0; i<N; i++)
	{
		if(sno[i] == snol)
			break;	
	} 
	
	if(i<N)
	{
		printf("学号为%lu的学生的基本信息为:\n",snol);
		printf("%-10ld",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
	}
	else 
		printf("您输入的学号不存在!\n");
}

void snamefind( unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int i;
	char sname1[20];
	//按姓名查找
	printf("请输入您要查找的姓名:");
	getchar();
	gets(sname1);
	for(i=0; i<N; i++)
	{
		if( strcmp(sname[i], sname1) == 0)
			break;
	}
	if(i<N)
	{
		printf("姓名为%s的学生的基本信息为:\n",sname1);
		printf("%-10lu",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");		
	}
	else 
		printf("你输入的姓名不存在!\n");
}



d.排序模块函数:根据C语言的成绩对10名学生的成绩进行降序排列,实现函数为cssort

void cssort( unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	//按成绩降序排列
	int i, j, k;
	unsigned long tsno;
	char tsname[20];
	int tsage;
	float tcs;
	
	for( i=0; i<N; i++)
	{
		k=i;
		for( j=i+1; j<N; j++)
		{
			if(cs[j]>cs[k])
				k=j;
		}
		
		if(k != j)
		{
			//交换下标i与k对应学生信息
			tsno=sno[i];
			sno[i]=sno[k];
			sno[k]=sno[i];   /*交换学号*/
			
			strcpy(tsname,sname[i]);
			strcpy(sname[i],sname[k]);
			strcpy(sname[k],tsname);   /*交换姓名*/
			
			tsage=sage[i];
			sage[i]=sage[k];
			sage[k]=tsage;	/*交换年龄 */ 
			
			tcs=cs[i];
			cs[i]=cs[k];
			cs[k]=tcs;			 
		}
	} 
}


e. 统计模块: 用于完成学生C语言成绩优、良、及格、以及不及格人数的统计, 实现函数total

void total (unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int i;
	//统计
	
	printf("\n\n\n优(成绩>=90)的学生为:\n");
	for( i=0; i<N; i++)
	{
		if(cs[i]>=90)
		{
		printf("%-10lu",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
		}
	} 
	
	printf("\n\n\n良(成绩>=80)的学生为:\n");
	for( i=0; i<N; i++)
	{
		if(cs[i]>=80 && cs[i]<90)
		{
		printf("%-10lu",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
		}		
	} 
	
	printf("\n\n\n及格(成绩>=60)的学生为:\n");
	for( i=0; i<N; i++)
	{
		if(cs[i]>=60 && cs[i]<80)
		{
		printf("%-10lu",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
		}			
	}
		
	printf("\n\n\n不及格(成绩<60)的学生为:\n");
	for( i=0; i<N; i++)
	{
		if(cs[i]<60)
		{
		printf("%-10ld",sno[i]);
		printf("%-16s",sname[i]);
		printf("%-4d",sage[i]);
		printf("%-6.0f",cs[i]);
		printf("\n");
		}		
	}
}

f.退出函数:exit(1);

(五) 主函数的设计

主函数的功能:

(1)变量的定义以及数组的定义;

(2) 显示界面;

(3) 选择操作;

其中第一步根据具体需求定义;第二模块由函数maininterface函数实现;而第三模块则由函数choice实现;

具体如下:

(1) 显示函数maininterface

void maininterface()
{
	printf("\t\t**************************************************\n");
	ptintf("\t\t************  欢迎使用学籍管理系统  **************\n");
	printf("\t\t*1.输入学生的额基本信息		2.输出学生的基本信息*\n");
	printf("\t\t*3.查找学生的基本信息               4.排序              *\n");
	printf("\t\t*5.统计                             0.退出              *\n");
	printf("\t\t*************************************************\n");
	printf("\t\t请输入0-5:");	
}

(2) 选择函数 choice

void choice( unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int m;
	while(1)
	{
		scanf("%d",&m);
		switch(m)
		{
			case 1:
				input(sno,sname,sage,cs,N);
				maininterface();
				break;
			case 2:
				output(sno,sname,sage,cs,N);
				maininterface();
				break;
			case 3:
				findinterface();
				findchoice(sno,sname,sage,cs,N);
				break;
			case 4:
				cssort(sno,sname,sage,cs,N);
				maininterface();
				break;
			case 5:
				total(sno,sname,sage,cs,N);
				maininterface();
			case 0:
				exit(1);
		}
	}
}


其中的findinterface用于显示查找模块的进入方式,选择学号查找或者姓名查找,findchoice()则是完成查找;

void findinterface()
{
	printf("**************************************************\n");
	printf("*************    欢迎使用查找操作   **************\n");
	printf("*1.按学号查找                                    *\n");
	printf("*2.按姓名查找                                    *\n");
	printf("*0.返回上一级                                    *\n");
	printf("**************************************************\n");
	printf("请输入0-2:");
}

void findchoice ( unsigned long sno[], char sname[][20], int sage[], float cs[], int N)
{
	int m;
	while(1)
	{
		scanf("%d",m);
		switch(m)
		{
			case 1:
				snofind( sno, sname, sage, cs,N);
				findinterface();
				break;
			case 2:
				snamefind( sno, sname, sage, cs, N);
				findinterface();
				break;
			case 0:
				break;
		}
		
		if(m==0)
			break;
	}
	maininterface();
}
最后进行主程序的设计,为了便于测试,假设人数为3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "guanli.h"

#define M 3

int main( int arge, char *argv[])
{
	unsigned long int sno[M];
	char sname[M][20];
	int sage[M];
	float cs[M];
	//int i,j;
	
	//显示界面
	maininterface();
	//选择操作
	choice(sno,sname,sage,cs,M);
}









网站公告

今日签到

点亮在社区的每一天
去签到