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

📄 ds.cpp

📁 使用C语言编写的控制台下的信息管理系统
💻 CPP
字号:
#include<stdio.h>   
#include<string.h> 
#include<stdlib.h> 

typedef  struct student
{   
	long		id;   
	char		name[10];         
	float		math1;  
	float		math2;
	float		linearalgebra;
	float		english;
	float		chinese;
	float		base;
	float		sports;
	float		sum;
	float		ave;

}STUDENT;   

int n=0;   
STUDENT   st[100];   
FILE *tp;
char	title[200]={"学号		姓名	数学1	数学2	线数	英语	语文	基础	体育	总分		平均成绩  \n"};

/*输入信息*/   
STUDENT   InputAstudent()   
{ 
	STUDENT   a;
	printf("学号:	");   scanf("%ld",&a.id);   
	printf("姓名:	");   scanf("%s",a.name);   
	printf("数学1:	");   scanf("%f",&a.math1);   
	printf("数学2:	");   scanf("%f",&a.math2);   
	printf("线数:	");   scanf("%f",&a.linearalgebra);
	printf("英语:	");	  scanf("%f",&a.english);
	printf("语文:	");	  scanf("%f",&a.chinese);
	printf("基础:	");   scanf("%f",&a.base);
	printf("体育:	");   scanf("%f",&a.sports);
	a.sum=a.math1+a.math2+a.linearalgebra+a.english+a.chinese+a.base+a.sports; 
	a.ave=float(a.sum/7.0);   
	printf("\n");
	return    a;   
}   

void InputStudents()   
{   

	int x;
	printf("\n请输入学生的信息\n\n");   
	st[n]=InputAstudent(); 
	n++;   
	printf("是否需要继续输入?     1.是,2.否		");
	scanf("%d",&x);
	if (x==1) 
		InputStudents();

	else  
		printf("\n退出输入!\n");
}   

/*输出信息*/   
void OutAstudent(STUDENT *p)   
{   

	printf("学号   姓名   数学1   数学2   线数   英语   语文   基础   体育   总分   平均成绩	\n");
	printf("%ld ",p->id);   
	printf("%s ",p->name);   
	printf("%5.3f ",p->math1);   
	printf("%5.3f ",p->math2);   
	printf("%5.3f ",p->linearalgebra);
	printf("%5.3f ",p->english);
	printf("%5.3f ",p->chinese);
	printf("%5.3f ",p->base);
	printf("%5.3f ",p->sports);
	printf("%5.3f ",p->sum);
	printf("%5.3f ",p->ave);
	printf("\n\n\n");

}   

void OutputStudents()   
{   
	int i;   
	for(i=0;i<n;i++)     
	{   

		OutAstudent(st+i);   
	}   

}   

/*按姓名查找*/   
int   SrchByname(char  *name)   
{   
	int  i=0;   
	while(strcmp(st[i].name,name)&&i<n)   i++;   
	if(i<n)     return   i;     
	else     return     -1;   
}   

void   Srchname()   
{     
	int     k;   
	char    name[10];   
	printf("请输入需要查找的学生的姓名:   ");
	scanf("%s",name); 
	printf("\n");
	k=SrchByname(name);   
	if(k>=0)   OutAstudent(st+k);     
	else       printf("\n查无此人!\n");   

}   

/*按学号查找*/   
int   SrchByid(long  id)   
{   
	int  i=0;   
	while(st[i].id!=id&&i<n)   i++;   
	if(i<n)     return     i;     
	else        return     -1;   
}   

void   Srchid()   
{
	int     k;
	long	id;
	printf("请输入需要查找的学生的学号:   ");
	scanf("%ld",&id);  
	printf("\n");
	k=SrchByid(id);   
	if(k>=0)   OutAstudent(st+k);   
	else       printf("\n查无此人!\n");   
} 

/*删除*/   
void DeleteAstudent(int k)   
{
	int i;   
	for(i=k;i<n;i++)   
	{
		st[i]=st[i+1];   

	}
	n--;
}

/*依姓名删除*/
void   DeleteByname()   
{ 
	int		i;
	char	name[10];   
	printf("请输入需要删除的学生姓名:   ");	scanf("%s",name); 
	printf("\n");
	i=SrchByname(name); 
	DeleteAstudent(i);
	OutputStudents();
}   

/*依学号删除*/
void   DeleteByid()   
{ 
	int		i;
	long	k;   
	printf("请输入需要删除的学生学号:   ");	scanf("%ld",&k); 
	printf("\n");
	i=SrchByid(k) ; 
	DeleteAstudent(i);
	OutputStudents();
}     


/*依姓名修改成绩*/   
int ChangeByname(char   *name,float   math1,float	math2,float		linearalgebra,float		english,float		chinese,float		base,float		sports)   
{
	int     k; 
	float	sum=0.0,ave;
	k=SrchByname(name);   
	if(k==-1)	 return	-1;   
	else	st[k].math1=math1;
			st[k].math2=math2;
			st[k].linearalgebra=linearalgebra;
			st[k].english=english;
			st[k].chinese=chinese;
			st[k].base=base;
			st[k].sports=sports;
			sum=math1+math2+linearalgebra+english+chinese+base+sports; 
			ave=float(sum/7.0);
			st[k].sum=sum;
			st[k].ave=ave;
	OutAstudent(st+k);
	return 1;
}   

void   Changename()     
{

	float   math1,math2,linearalgebra,english,chinese,base,sports;   
	char    name[10];   
	printf("请输入需要修改的学生的姓名:		");
	scanf("%s",name); 
	printf("\n");
	printf("请输入修改后的成绩:\n");
	printf("数学1:	");	scanf("%f",&math1);
	printf("数学2:	");	scanf("%f",&math2);
	printf("线数:	");	scanf("%f",&linearalgebra);
	printf("英语:	");	scanf("%f",&english);
	printf("语文:	");	scanf("%f",&chinese);
	printf("基础:	");	scanf("%f",&base);
	printf("体育:	");	scanf("%f",&sports);
	printf("\n");
	ChangeByname(name,math1,math2,linearalgebra,english,chinese,base,sports);   
}   

/*依学号修改成绩*/   
int ChangeByid(long   id,float   math1,float	math2,float		linearalgebra,float		english,float		chinese,float		base,float		sports)   
{
	int     k; 
	float	sum=0.0,ave;
	k=SrchByid(id);   
	if(k==-1)   return   -1;   
	else	st[k].math1=math1;
			st[k].math2=math2;
			st[k].linearalgebra=linearalgebra;
			st[k].english=english;
			st[k].chinese=chinese;
			st[k].base=base;
			st[k].sports=sports; 
			sum=math1+math2+linearalgebra+english+chinese+base+sports; 
			ave=float(sum/7.0);
			st[k].sum=sum;
			st[k].ave=ave;
	OutAstudent(st+k);
	return 1;
}   
void   Changeid()   
{
	long  id;
	float   math1,math2,linearalgebra,english,chinese,base,sports; 
	printf("请输入需要修改的学生的学号:   ");
	scanf("%ld",&id);
	printf("\n");
	printf("请输入修改后的成绩:\n");
	printf("数学1:	");	scanf("%f",&math1);
	printf("数学2:	");	scanf("%f",&math2);
	printf("线数:	");	scanf("%f",&linearalgebra);
	printf("英语:	");	scanf("%f",&english);
	printf("语文:	");	scanf("%f",&chinese);
	printf("基础:	");	scanf("%f",&base);
	printf("体育:	");	scanf("%f",&sports); 
	printf("\n");
	ChangeByid(id,math1,math2,linearalgebra,english,chinese,base,sports);   
}
   
/*学生成绩降序排序*/   
void SortByave()   
{
	STUDENT     t;
	int   i,j,m; 
	for(i=0;i<n-1;i++)   
	{

		for(j=0;j<n-i-1;j++)   
		{
			if(st[j+1].ave>st[j].ave)     
			{
				t.id=st[j].id;
				for(m=0;m<10;m++)
					t.name[m]=st[j].name[m];
				t.math1=st[j].math1;
				t.math2=st[j].math2;
				t.linearalgebra=st[j].linearalgebra;
				t.english=st[j].english;
				t.chinese=st[j].chinese;
				t.base=st[j].base;
				t.sports=st[j].sports;
				t.sum=st[j].sum;
				t.ave=st[j].ave;

				st[j].id=st[j+1].id;
				for(m=0;m<10;m++)
					st[j].name[m]=st[j+1].name[m];
				st[j].math1=st[j+1].math1;
				st[j].math2=st[j+1].math2;
				st[j].linearalgebra=st[j+1].linearalgebra;
				st[j].english=st[j+1].english;
				st[j].chinese=st[j+1].chinese;
				st[j].base=st[j+1].base;
				st[j].sports=st[j+1].sports;
				st[j].sum=st[j+1].sum;
				st[j].ave=st[j+1].ave;

				st[j+1].id=t.id;
				for(m=0;m<10;m++)
					st[j+1].name[m]=t.name[m];
				st[j+1].math1=t.math1;
				st[j+1].math2=t.math2;
				st[j+1].linearalgebra=t.linearalgebra;
				st[j+1].english=t.english;
				st[j+1].chinese=t.chinese;
				st[j+1].base=t.base;
				st[j+1].sports=t.sports;
				st[j+1].sum=t.sum;
				st[j+1].ave=t.ave;

			}
		}

	}   
	OutputStudents();   
}   

/*学生学号升序排序*/   
void SortByid()   
{
	STUDENT     t;
	int   i,j,m; 
	for(i=0;i<n-1;i++)   
	{

		for(j=0;j<n-i-1;j++)   
		{
			if(st[j+1].id<st[j].id)     
			{
				t.id=st[j].id;
				for(m=0;m<10;m++)
					t.name[m]=st[j].name[m];
				t.math1=st[j].math1;
				t.math2=st[j].math2;
				t.linearalgebra=st[j].linearalgebra;
				t.english=st[j].english;
				t.chinese=st[j].chinese;
				t.base=st[j].base;
				t.sports=st[j].sports;
				t.sum=st[j].sum;
				t.ave=st[j].ave;

				st[j].id=st[j+1].id;
				for(m=0;m<10;m++)
					st[j].name[m]=st[j+1].name[m];
				st[j].math1=st[j+1].math1;
				st[j].math2=st[j+1].math2;
				st[j].linearalgebra=st[j+1].linearalgebra;
				st[j].english=st[j+1].english;
				st[j].chinese=st[j+1].chinese;
				st[j].base=st[j+1].base;
				st[j].sports=st[j+1].sports;
				st[j].sum=st[j+1].sum;
				st[j].ave=st[j+1].ave;

				st[j+1].id=t.id;
				for(m=0;m<10;m++)
					st[j+1].name[m]=t.name[m];
				st[j+1].math1=t.math1;
				st[j+1].math2=t.math2;
				st[j+1].linearalgebra=t.linearalgebra;
				st[j+1].english=t.english;
				st[j+1].chinese=t.chinese;
				st[j+1].base=t.base;
				st[j+1].sports=t.sports;
				st[j+1].sum=t.sum;
				st[j+1].ave=t.ave;

			}
		}

	}   
	OutputStudents();   
}   

/*统计各分数段人数*/   
int     CountByave(int   low,int   high)   
{
	int   i,s=0;   
	for(i=0;i<n;i++)   
	{ 
		if(st[i].ave>=low&&st[i].ave<high)
			s++;
	}
	return     s;   
}   

void     DisplayCount()   
{   
	int   i,low,high;
	printf("各个分数段的人数:\n");
	for(i=0;i<10;i++)   
	{
		low=i*10;
		high=i*10+9; 
		printf("%d	~ %d:   ",low,high);   
		printf("%5d\n",CountByave(low,high));
	}   

}   

/*文件输出*/
void FileWrite() 
{
	int i;
	char file[10];
	printf("请输入要保存文件名:		");
	scanf("%s",file);
	tp = fopen(file,"w+");
	fputs(title,tp);
	for(i=0;i<n;i++)	
	{
		fprintf(tp,"%d	%s	%5.3f	%5.3f	%5.3f	%5.3f	%5.3f	%5.3f	%5.3f	%5.3f		%5.3f	\n",st[i].id,st[i].name,st[i].math1,st[i].math2,st[i].linearalgebra,st[i].english,st[i].chinese,st[i].base,st[i].sports,st[i].sum,st[i].ave);

	}
	fclose(tp);
	printf("\n文件保存成功!\n");
}

/*分离函数*/
void Depart(char to[200])
{
	int i = 0;
	int j = 0;
	int k = 0;
	static int ni=0;
	char ch[30]={'\0'};
	int len = strlen(to);
	if(len>4)
	{ 
	while(j<len)
	{
		if(to[j]!=' '&&to[j]!='\t')
		{
			for(i=0; to[j]!=' '&&j<len&&to[j]!='\t'; i++,j++)
			{
				ch[i]=to[j];
			}
			k++;
			ch[i]='\0';
			switch(k)
			{
			case 1:
				st[ni].id=atol(ch);
				break;
			case 2:
				strcpy(st[ni].name,ch);
				break;
			case 3:
				st[ni].math1=float(atof(ch));
				break;
			case 4:
				st[ni].math2=float(atof(ch));
				break;
			case 5:
				st[ni].linearalgebra=float(atof(ch));
				break;
			case 6:
				st[ni].english=float(atof(ch));
				break;
			case 7:
				st[ni].chinese=float(atof(ch));
				break;
			case 8:
				st[ni].base=float(atof(ch));
				break;
			case 9:
				st[ni].sports=float(atof(ch));
				break;
			case 10:
				st[ni].sum=float(atof(ch));
				break;
			case 11:
				st[ni].ave=float(atof(ch));
				break;	
			}
		}
		else
			j++;

	}
		ni++;
	}
	n=ni;
}

/*文件读入*/
void FileRead()
{

	char file[20],read[200];
	printf("请输入要导入的文件名:		");
	scanf("%s",file);
	tp=fopen(file,"r");
	fgets(title,200,tp);
	printf("\n%s",title);
	while(!feof(tp))
	{
		fgets(read,200,tp);
		printf("%s\n",read);
		Depart(read);

	}
	OutputStudents();

	printf("\n导入信息成功!\n");
	
}

/*显示菜单*/
int   Displaymenu()   
{     
	int c;
	printf("\n");   
	printf("     *******************************************\n");
	printf("         欢迎使用学生信息管理系统 by ycyin\n");
	printf("     *******************************************\n");
	printf("\n");
	printf("\n");
	printf("1.输入学生信息				2.输出学生信息\n");   
	printf("\n");      
	printf("3.依姓名查询学生信息			4.依学号查询学生信息\n");   
	printf("\n");         
	printf("5.依姓名删除学生信息			6.依学号删除学生信息\n");     
	printf("\n");   
	printf("7.依姓名修改学生分数			8.依学号修改学生分数\n");   
	printf("\n");   
	printf("9.按学生平均成绩降序显示信息		10.按学生学号升序显示信息\n");   
	printf("\n");   
	printf("11.统计各分数段人数  			12.将学生信息保存到文件\n");
	printf("\n");
	printf("13.从文件导入学生信息			14.退出系统\n");
	printf("\n");  
	printf("\n   请选择:    ");
	scanf("%d",&c);
	printf("\n");

	return  c;   
}

/*返回菜单*/
int Backtomenu()
{
	int d,a;
	printf("\n是否返回主菜单?		1.是 2.否		");
	scanf("%d",&d);
	if(d==1)	  a=Displaymenu();
	else		  a=14;
	return	a;
}

/*主函数*/
void main()   
{   

	int	 ch,i=1;
	ch=Displaymenu();  

	while(i==1)   
	{   

		switch(ch)   
		{   
		case   1:  InputStudents();			ch=Backtomenu();			break;   
		case   2:  OutputStudents();		ch=Backtomenu();			break;   
		case   3:  Srchname();				ch=Backtomenu();		    break;   
		case   4:  Srchid();				ch=Backtomenu();			break;   
		case   5:  DeleteByname();			ch=Backtomenu();		    break;   
		case   6:  DeleteByid();			ch=Backtomenu();		    break;   
		case   7:  Changename();			ch=Backtomenu();		    break;   
		case   8:  Changeid();				ch=Backtomenu();		    break;   
		case   9:  SortByave();				ch=Backtomenu();		    break; 
		case   10: SortByid();				ch=Backtomenu();			break;
		case   11: DisplayCount();			ch=Backtomenu();		    break;   
		case   12: FileWrite();				ch=Backtomenu();		    break;   
		case   13: FileRead();				ch=Backtomenu(); 			break; 
		case   14: printf("\n谢谢使用,退出系统!");		i=0;			break;
		
		}   
	}   

}


⌨️ 快捷键说明

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