我是靠谱客的博主 饱满橘子,最近开发中收集的这篇文章主要介绍数据结构课设------学生管理系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学生成绩管理系统

现有学生成绩信息文件1(1.txt),内容如下
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
…. … … … …
学生成绩信息文件2(2.txt),内容如下:
姓名 学号 语文 数学 英语
陈果 31 57 68 82
李华明 32 88 90 68
张明东 33 48 42 56
李明国 34 50 45 87
陈道亮 35 47 58 77
…. … … … …
试编写一管理系统,要求如下:

  1. 实现对两个文件数据进行合并,生成新文件3.txt
  2. 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt
  3. 对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)
  4. 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)
  5. 要求至少使用结构体实现上述要求,若增加其他实现方式更好.
  6. 采用多种方法且算法正确者,可适当加分.

代码

#include <stdio.h>
#include <string.h>

typedef struct
{
	char id[10];
	char name[20];
	char score[10];
}student;

#define N 1024

void menu(int *n)
{
	printf("ttt*********************************************n");
	printf("ttttt1.查找学生信息n");
	printf("ttttt2.按成绩进行排序n");
	printf("ttttt3.合并信息表n");
	printf("ttttt4.创建补考信息表n");
	printf("ttttt0.退出n");
	printf("ttt*********************************************n");
	printf("请输入操作数0-4:");
	scanf("%d", n);
}//创建菜单

void Printfstudent(student p[N], int len)
{
	int i;
	printf("学号tt姓名tt分数nn");
	for (i = 0; i < len; i++)
	{
		printf("%stt", p[i].id);
		printf("%c%c%c%c%c%c%c%c%ctt", p[i].name[0],p[i].name[1],p[i].name[2],p[i].name[3],p[i].name[4],p[i].name[5],p[i].name[6],p[i].name[7],p[i].name[8]);
		printf("%st\tn", p[i].score);
	}
}

int visit(student p[N],int len,int i)
{
	int k=0;
	while(p[i].score[k] !='')
		 k++;
	return k;
}



void Sort(student p[N], int len)
{
	student st;
	int i,j,a,b;	
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
		{			
			if(strcmp(p[j].score,p[j+1].score) < 0)
			{
			   st = p[j];
			   p[j] = p[j+1];
			   p[j+1] = st;
			}
            a=visit(p,len,j);
			b=visit(p,len,j+1);
			if(a<b)
			{
			   st = p[j];
			   p[j] = p[j+1];
			   p[j+1] = st;
			 
			}
		
			
		}
	}
	Printfstudent(p, len);
}

void serch(student p[N], int len)
{
	int i, j;
	int flat = 0;
	char num[100];
	char name1[100];
	printf("请输入1或2,1按学号查找,2按姓名查找:");
	scanf("%d", &i);
	if (i == 1)
	{
		printf("请输入要查找的学号:");
		scanf(" %s", num);
		for (j = 0; j <len; j++)
		{
			if (strcmp(p[j].id, num) == 0)
			{
				flat++;
				break;
			}
		}
		if ( flat==0 )
		{
			printf("学号出现错误!n");
		}
		else
		{
			printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %sn", p[j].id, p[j].name[0],p[j].name[1],p[j].name[2],p[j].name[3],p[j].name[4],p[j].name[5],p[j].name[6],p[j].name[7],p[j].name[8], p[j].score);
		}
	}
	else if (i == 2)
	{
		flat = 0;
		printf("请输入要查找的姓名:");
		scanf(" %s", name1);
		for (j = 0; j <len; j++)
		{
			if (strcmp(p[j].name, name1) == 0)
			{
				flat++;
				printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %sn", p[j].id, p[j].name[0],p[j].name[1],p[j].name[2],p[j].name[3],p[j].name[4],p[j].name[5],p[j].name[6],p[j].name[7],p[j].name[8], p[j].score);
				break;
			}
		}
		if (!flat)
		{
			printf("姓名输入有误!n");
		}
	}
}

//文件1.txt的读入
int dos1(student p[N],int len)
{
	int i,k;
	char a[200];
	FILE *fp = fopen("1.txt", "r+");
	if (fp == NULL)
		return 1;
	fgets(a,200,fp);
	fclose(fp);
	i=0; len=0; k=0;
	while (a[i] != '#')
	{
	    while (a[i] != ',')
		{
	    	p[len].id[k]=a[i];
		     i++;k++;			 
		}
        i++; k=0;
	    while (a[i] != ',')
		{
		    p[len].name[k]=a[i];
		    i++; k++;			
		}
		i++; k=0;
		
	    while (a[i] != '&')
		{
		    p[len].score[k]=a[i];
		    i++; k++;			
		}
		i++; k=0; len++;
	}
	
	return len;
}


//文件2.txt的读入
int dos2(student p[N],int len)
{
	int i,k;
	char b[200];
	FILE *fp = fopen("2.txt", "r+");
	if (fp == NULL)
		return 1;
	fgets(b,200,fp);	
	fclose(fp);
	i=0; k=0;
	while ( b[i]!='#')
	{
	    while (b[i] != ',')
		{
	    	p[len].id[k]=b[i];
		     i++;k++;
			 
		}
        i++; k=0;
	    while (b[i] != ',')
		{
		    p[len].name[k]=b[i];
		    i++; k++;
			
		}
		i++; k=0;
	    while (b[i] != '&')
		{
		    p[len].score[k]=b[i];
		    i++; k++;			
		}
		i++; k=0; len++;
	}
	return len;
}

//合并到文件3.txt
void dos3(student p[N],int len)
{
	FILE *fp;
	int i;
	fp=fopen("3.txt","w+");
	for(i=0;i<len;i++)
	{
		fprintf(fp,"%s,%c%c%c%c%c%c%c%c%c,%s &",p[i].id,p[i].name[0],p[i].name[1],p[i].name[2],p[i].name[3],p[i].name[4],p[i].name[5],p[i].name[6],p[i].name[7],p[i].name[8],p[i].score);
	}
	fclose(fp);
}

//将补考的人的名单输出到文件4.txt
void dos4(student p[N],int len)
{
	FILE *fp;
	int i=0,a;
	char b[2]="60";
	fp=fopen("4.txt","w+");
	while(i<len)
	{
		
		a=visit(p,len,i);
		if(a==3) i++;
		else if(strcmp(p[i].score,b) > 0)
			i++;
		else if(strcmp(p[i].score,b) < 0)
		{
			fprintf(fp," %s,%c%c%c%c%c%c%c%c%c,%s &",p[i].id,p[i].name[0],p[i].name[1],p[i].name[2],p[i].name[3],p[i].name[4],p[i].name[5],p[i].name[6],p[i].name[7],p[i].name[8],p[i].score);
			i++;
		}
	}
	fclose(fp);
}

void main()
{
	int n,len;
	student p[N]={0};
	len=dos1(p,len);	
	len=dos2(p,len);	
	while (1)
	{
	menu(&n);
	switch (n)
	{  case 1:serch(p,len);
		   break;
	   case 2:Sort(p,len);               
		   break;
	   case 3:dos3(p,len);
		   printf("合并完成n");
		   break;
	   case 4:dos4(p,len);
		   printf("创建完成n");
		   break;
	   case 0:printf("欢迎再次使用.n");		   
		   break;
	   default:
		   printf("您的输入有误,请重新输入.n");
		   break;
	}
	}
}

最后

以上就是饱满橘子为你收集整理的数据结构课设------学生管理系统的全部内容,希望文章能够帮你解决数据结构课设------学生管理系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部