ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于数组或链表的学生信息管理系统(小学期C语言程序实训)

2022-06-10 10:00:53  阅读:188  来源: 互联网

标签:10 next 链表 stu 实训 printf C语言 grad s%


1.基于数组的学生信息管理系统

实验内容
编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩。
实验要求:
(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数Input:从键盘输入一个学生信息。
(3) 定义函数Output:将某个学生信息格式化输出。
(4) 定义函数Save:将某个学生信息存入文件。
(5) 定义函数Fetch:从文件中随机读取某个学生的信息。
(6) 定义函数Max:求所有学生某门课程的最高分和分数最高的学生的姓名。
(7) 定义函数Sort_select:对某个专业的学生,按总平均成绩由低到高进行简单选择排序。
(8) 定义函数Sort_buble:对某个班级的学生,按总平均成绩由高到低进行冒泡排序。
(9) 定义函数Sort_insert:对某个班级的学生,按某门课程成绩由低到高进行直接插入排序。
(10) 定义函数Search:实现班级和成绩的综合查找(如1班,总分240分以上同学)。

程序如下:

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
#include<time.h>
#include<typeinfo>
int length;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];//标题 
struct student
{
	char grad[10];//学号
	char name[10];//姓名
	char spec[10];//专业
	char stu_class[10];//班级 
	int score1; 
	int score2;
	int score3;
}stu[30];

int Init()//初始化 
{ 	
	int i = 0;
	FILE *p = fopen("1.txt", "r");      //打开文件         
	if(p==NULL)
		return 0;
	fscanf(p,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题		
	while (!feof(p)) //检测流上的文件结束符,如果文件结束,则返回非0值
	{	//将文件中数据读取到结构体数组
		fscanf(p,"%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3);
		i++;
	}
	length = i;
	fclose(p);
	return 1;
} 

void Input()//从键盘输入一个学生信息存入文件和结构体数组。 
{
	printf("请输入学生信息:\n");
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	int i = length; 
	scanf("%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3); 
	FILE *p = fopen("1.txt", "a");      //打开文件                  
	fprintf(p,"\n%s %s      %s       %s  %d      %d         %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
	fclose(p);
	printf("写入文件成功!\n"); 
	length++;
} 

void Output()//输入学号,将对应的学生信息格式化输出。
{	
	char *grad;
	printf("请输入查询的学号:");
	scanf("%s",grad);
	printf("学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	for(int i=0;i<length;i++)
		if(strcmp(stu[i].grad,grad)==0)
			printf("%s %s %s %s %d    %d   %d \n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}

void Save()//将某个学生信息存入一个新的文件。 
{
	printf("请输入学生信息:\n");
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	int i = length; 
	scanf("%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3); 
	FILE *p = fopen("other.txt", "w");      //打开文件    
	fprintf(p,"%s %s %s %s %s %s %s\n",a,b,c,d,e,f,g);
	fprintf(p,"%s %s      %s   %s  %d      %d         %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
	fclose(p);
	printf("写入文件成功!\n"); 
} 

void Max()//求所有学生某门课程的最高分及对应的学生的姓名。 
{
	int i;
	int max[3]={0,0,0};
	for(i=0;i<length;i++)
		if(max[0]<stu[i].score1)
			max[0]=stu[i].score1;
			
	printf("课程1最高分:%d分----",max[0]);
	for(i=0;i<length;i++)
		if(stu[i].score1 == max[0])
			printf("%s ",stu[i].name);
	printf("\n");
	
	for(i=0;i<length;i++)
		if(max[1]<stu[i].score2) 
			max[1]=stu[i].score2; 
	printf("课程2最高分:%d分----",max[1]);		
	for(i=0;i<length;i++)
		if(stu[i].score2 == max[1])
			printf("%s ",stu[i].name);
	printf("\n");
	
	for(i=0;i<length;i++)
		if(max[2]<stu[i].score3)
			max[2]=stu[i].score3;
	printf("课程3最高分:%d分----",max[2],stu[i].name);		
	for(i=0;i<length;i++)
		if(stu[i].score3 == max[2])
			printf("%s ",stu[i].name);
	printf("\n");
}

void Fetch()//从文件中随机读取某个学生的信息。 
{
	int i = time(NULL) % length;
	printf("第%d名学生\n",i+1);
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	printf("%s %s %s %s %d %d %d \n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}

void Sort_select()//按总平均成绩由低到高进行简单选择排序。 
{
	struct student tmp;
	char str[6];
	int i,j,t,n,k;
	float avg[length],avg_temp;
	printf("请输入专业:\n");
	scanf("%s",str);
	for(i=0;i<length;i++)
		avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3;
	//简单选择排序
    for(i=0; i<length; i++)  //做n-1趟选取
    {
        k = i;
        for(j=i+1;j<=length;j++)
            if(avg[j] < avg[k] && strcmp(stu[i].spec,str)==0 && strcmp(stu[j].spec,str)==0)
                k = j;    //k为最小值
        if(i!=k)//交换
        {
        	tmp=stu[k];      avg_temp = avg[k];
			stu[k]=stu[i];   avg[k] = avg[i];
			stu[i]=tmp;	     avg[i] = avg_temp;
        }
    }
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n");
    for(i=0;i<length;i++)
		if(strcmp(stu[i].spec,str)==0) 
			printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]);
}

void Sort_buble()//按总平均成绩由高到低进行冒泡排序。 
{
	struct student tmp;
	char str[6];
	float avg[length],avg_temp;
	int i,j;
	printf("请输入班级:\n");
	scanf("%s",str);
	for(i=0;i<length;i++)
		avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3;
	//冒泡排序
	for(i=0;i<length;i++)
		for(j=0;j<length;j++)
			if(avg[i]>avg[j] && strcmp(stu[i].stu_class,str)==0 && strcmp(stu[j].stu_class,str)==0) 
			{
				tmp = stu[i];      avg_temp = avg[i];
				stu[i] = stu[j];   avg[i] = avg[j];
				stu[j] = tmp;	     avg[j] = avg_temp;
			}
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n");
	for(i=0;i<length;i++)
		if(strcmp(stu[i].stu_class,str)==0) 
			printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]);
}

void Sort_insert()//按课程1成绩由低到高进行直接插入排序。 
{
	int i,j,len=0;
	char str[6];
	struct student tmp;
	struct student insert[100];
	printf("请输入班级:\n");
	scanf("%s",str);
    for(i=0;i<length;i++)
	    if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序 
	    {
	    	insert[len] = stu[i];
	    	len++;
		}
	for(i=1;i<len;i++)//循环从第2个元素开始
    {
        if(insert[i].score1 < insert[i-1].score1)
        {
            tmp = insert[i];
            for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--)
                insert[j+1] = insert[j];
            insert[j+1] = tmp;
        }
    }
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
    for(i=0;i<len;i++)
		printf("%5s %-6s %3s %s %3d %3d %3d\n",insert[i].grad,insert[i].name,insert[i].spec,insert[i].stu_class,insert[i].score1,insert[i].score2,insert[i].score3);
}

void my_Sort_insert()//按课程1成绩由低到高进行直接插入排序。 
{
	int i,j=0,len=0,location[50];
	char str[6];
	struct student tmp;
	struct student insert[100];
	printf("请输入班级:\n");
	scanf("%s",str);
    for(i=0;i<length;i++)
	    if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序 
	    {
	    	insert[len] = stu[i];
	    	location[j++] = i;//存储位置 
	    	len++;
		}
	for(i=1;i<len;i++)//循环从第2个元素开始
    {
        if(insert[i].score1 < insert[i-1].score1)
        {
            tmp = insert[i];
            for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--)
                insert[j+1] = insert[j];
            insert[j+1] = tmp;
        }
    }
    for(i=0;i<len;i++)
    	stu[location[i]] = insert[i];
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
    for(i=0;i<length;i++)
		printf("%5s %-6s %3s %s %3d %3d %3d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}

void Search()//查找某班总分在某分数段以上的学生 
{
	int i,k=0,score;
	char str[6];
	printf("请输入班级和分数:\n");
	scanf("%s%d",str,&score);
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 总分\n");
	for(i=0;i<length;i++)
		if(strcmp(stu[i].stu_class,str)==0 && stu[i].score1+stu[i].score2+stu[i].score3 > score)
			{
				printf("%5s %-6s %3s %s %3d %3d %3d   %d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score1+stu[i].score2+stu[i].score3);
				k++; 
			}
	printf("%s班总分%d以上的一共有%d人。\n",str,score,k);
}

void Sort_total_score()//Self:全体总分排序
{
	struct student tmp;
	int i,j;
	//根据总分进行从大到小冒泡排序
	for(i=0;i<length;i++)
		for(j=0;j<length;j++)
			if(stu[i].score1+stu[i].score2+stu[i].score3 > stu[j].score1+stu[j].score2+stu[j].score3) 
			{
				tmp = stu[i];      
				stu[i] = stu[j];   
				stu[j] = tmp;	     
			}
	for(i=0;i<length;i++)
		printf("%5s %-6s %3s %s %3d %3d %3d %d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score1+stu[i].score2+stu[i].score3);
}

void Sort_grad()//Self:全体学号排序 
{
	struct student tmp;
	int i,j;
	//根据学号进行从大到小冒泡排序
	for(i=0;i<length;i++)
		for(j=0;j<length;j++)
			if(strcmp(stu[i].grad,stu[j].grad) > 0 )
			{
				tmp=stu[i];      
				stu[i]=stu[j];   
				stu[j]=tmp;	     
			}
	for(i=0;i<length;i++)
		printf("%5s %-6s %3s %s %3d %3d %3d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}

int main()
{	
	int i,j,k;
	if(Init()==0)
	{
		printf("文件不存在!");
		return 0;
	}
	printf("菜单\n1.输入学生信息\n2.输出学生信息\n3.写入文件\n4.查找课程最高分\n5.随机读取学生信息\n6.同专业平均分简单选择排序\n7.同班级平均分冒泡排序\n");
	printf("8.同班级按课程1分数直接插入排序\n9.综合查找\n10.全体总分排序\n11.全体学号排序\n12.重现菜单\n0.退出\n"); 
	printf("请输入选项:");
	scanf("%d",&k);
	while(k)
	{
		switch(k)
		{
			case 0: 
				break;
			case 1: 
				Input(); 
				break;
			case 2:	
				Output();
				break;
			case 3: 
				Save(); 
				break;
			case 4: 
				Max();
				break;
			case 5: 
				Fetch();
				break;
			case 6: 
				Sort_select();
				break;
			case 7: 
				Sort_buble();
				break;
			case 8: 
				Sort_insert();
				//my_Sort_insert();
				break;
			case 9: 
				Search();
				break;
			case 10: 
				Sort_total_score(); 
				break;
			case 11:
				Sort_grad();
				break;
			case 12:
				printf("菜单\n1.写入文件\n2.输出学生信息\n3.写入新文件\n4.查找课程最高分\n5.随机读取学生信息\n6.同专业平均分简单选择排序\n7.同班级平均分冒泡排序\n");
				printf("8.同班级按课程1分数直接插入排序\n9.综合查找\n10.全体总分排序\n11.全体学号排序\n12.重现菜单\n0.退出\n"); 
				break;
			default:
				printf("输入有误,请重新输入!\n"); 
		} 
		printf("请输入选项:");
		scanf("%d",&k);
	}
	return 0;
}

void write()
{
	int i = length; 
	FILE *p = fopen("1.txt", "w");      //打开文件    
	fprintf(p,"%s %s %s %s %s %s %s\n",a,b,c,d,e,f,g);
	for(i=0;i<length;i++)
		fprintf(p,"%s %s      %s   %s  %d      %d         %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
	fclose(p);
} 

1.txt文本文件内容:

grad name spec     class     score1 score2 score3
2201 Amy   cs        2018-1  98      95         98
2202 Bob    cs        2018-2  91      74         59
2203 Cindy  cs        2018-2  98      84         79
2204 Dell     law      2018-1  86      94         99
2205 Emy    law      2018-1  98      86         89

2.基于链表的学生信息管理系统

实验内容:
编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的链表结点类型,包括:学号、姓名、班级、专业、3门成绩。
实验要求:
(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数CreateList:按学号由小到大,建立有序的链表。逆序输入 n 个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
(3) 定义函数Output:以指向某个学生结点的指针为参数,将学生信息格式化输出。
(4) 定义函数Save:将某个学生信息存入文件。
(5) 定义函数Fetch:从文件中随机读取某个学生的信息。
(6) 定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。
(7) 定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
(8) 定义函数Delete_num:从链表中删除指定学号的学生。
(9) 定义函数Search_major_subject_score:查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
(10) 定义函数Delete_major_subject:从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。

程序如下:

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
#include<time.h>
int length=0;
using namespace std;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];
//定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩
typedef struct StuNode
{
	char grad[10];//学号
	char name[10];//姓名
	char spec[10];//专业
	char stu_class[10];//班级 
	int score1;//C
	int score2;//Java 
	int score3;//Python 
	struct StuNode *next;
}student, *StuLink;

void Sort(StuLink &head)//从小到大进行冒泡排序 
{
	StuLink tmp,pre,p,q;
	if (head->next)
	{
		p = head->next->next;
		head->next->next = NULL;
		while (p)
		{
			pre = head;  //pre是q的前驱
			q = pre->next; 
			while (q && strcmp(q->grad,p->grad)<0)//从链表第二个结点开始找比当前插入值大的结点
			{
				pre = pre->next;
				q = q->next; 
			}
			tmp = p->next;//将p插入到结点pre和q之间
			p->next = q;
			pre->next = p; 
			p = tmp;
		}
	}	
} 

student *CreateList()//初始化:创建链表 
{
	void Output(StuLink &p);
	StuLink head = (student*)malloc(sizeof(student));
	StuLink p,q;
	p = head;
	q = head;
	char grad[10];//学号
	char name[10];//姓名
	char spec[10];//专业
	char stu_class[10];//班级 
	int score1;
	int score2;
	int score3;
	FILE *r= fopen("2.txt","r");
	if(r==NULL)
	{
		printf("打开文件失败!");
		return NULL;
	}
	fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题 
	while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF)
	{
		q = (student*)malloc(sizeof(student));
		strcpy(q->grad,grad);
		strcpy(q->name,name);
		strcpy(q->spec,spec);
		strcpy(q->stu_class,stu_class);
		q->score1 = score1;
		q->score2 = score2;
		q->score3 = score3;
		p->next = q; 
		p = q;
		length++;
	}
	p->next = NULL;
	Sort(head);
	
	//倒序输出 
	StuLink k = head,t;
	while(k->next)  
		k = k->next;
	printf("倒序输出:\n 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	while(k!=head)
	{	//倒序输出 
		t = head;
		while(t->next!=k)
			t = t->next;//t为k前驱 
		Output(k);
		k = t;
	}
	return head;
}

void Output(StuLink &p)//输出信息 
{
	printf("%5s %-5s %-3s %s %3d %3d %3d\n",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
}

void Print_List(StuLink &head)//打印整个链表 
{
	StuLink p = head->next;
	while(p)
	{
		Output(p);
		p = p->next;
	}
}

void Save(StuLink &head)//写入文件。
{	
	StuLink p = (student*)malloc(sizeof(student)),q = head->next;
	char grad[10],name[10],spec[10],stu_class[10];
	int score1,score2,score3;
	printf("请输入学生信息:\n");
	scanf("%s%s%s%s%d%d%d",p->grad,p->name,p->spec,p->stu_class,&p->score1,&p->score2,&p->score3); 
	FILE *w =fopen("2.txt","a");
	if(w==NULL)
	{
		printf("打开文件失败!\n");
		return;
	}
	else printf("写入成功!\n"); 
	fprintf(w,"\n%s %s      %s       %s  %d      %d         %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
	fclose(w);
	//存入链表 
	p->next = q;
	head->next = p;
	Sort(head);
}

void Fetch(StuLink &H)//随机读取某个学生的信息。 
{
	StuLink p = H->next;
	int i = time(NULL) % length;
	int j = i;
	while(j)
	{
		p = p->next;
		j--;
	}
	printf("第%d名学生\n",i+1);
	printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
	Output(p);
}

student *Search_num(StuLink &H) 
{	//查找指定学号的学生,返回指向该学生结点的指针。
	char grad[10];
	printf("请输入查询信息的学号:"); 
	scanf("%s",grad);
	StuLink p = H->next;
	while(p)
	{
		if(strcmp(p->grad,grad)==0) 
			return p;
		p = p->next;
	}
	return NULL;
}

void InsertList(StuLink &H)
{	//在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。 
	StuLink p = H->next, q = H;
	StuLink insert = (student*)malloc(sizeof(student));
	printf("请输入学生信息:\n");
	scanf("%s%s%s%s%d%d%d",insert->grad,insert->name,insert->spec,insert->stu_class,&insert->score1,&insert->score2,&insert->score3); 
	
	while(p)
	{
		if(strcmp(p->grad,insert->grad) > 0 ) 
		{
			q->next = insert;//应插入q和p之间
			insert->next = p;
			break;
		}
		q = q->next;//q是p的前驱 
		p = p->next;
	}	
	if(!p)//insert的学号大于所有已知值 
	{
		q->next = insert;
		insert->next = NULL;
	}
	p = H->next;
	printf("\n");
	Print_List(H);
}

void Delete_num(StuLink &H)//从链表中删除指定学号的学生。 
{
	StuLink p = H->next, q = H;
	char grad[10]; 
	printf("请输入想删除的学生的学号:\n");
	scanf("%s",grad); 
	while(p)
	{
		if(strcmp(p->grad,grad)==0)   
		{
			q->next = p->next;
			free(p);
			break;
		}
		q = q->next;
		p = p->next;
	}
	Print_List(H);
}

student *Search_major_subject_score(StuLink &H)
{	//查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
	char spec[10];
	float score;
	StuLink p = H->next;
	int lesson;
	printf("请输入专业、课程序号和门限分数:\n"); 
	scanf("%s%d%f",spec,&lesson,&score);
	while(p)
	{
		if(strcmp(p->spec,spec)==0)
			if(lesson==1 && p->score1<score || lesson==2 && p->score2<score || lesson==3 && p->score3<score) 
				return p;
		p = p->next;
	}
	return NULL;
}

void Delete_major_subject(StuLink &H)
{	//从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
	char spec[10];
	float score;
	StuLink p = H->next, q = H;
	int lesson,flag = 0;
	printf("请输入专业、课程序号和门限分数:\n"); 
	scanf("%s%d%f",spec,&lesson,&score);
	while(p)
	{	
		if(strcmp(p->spec,spec)==0 && lesson == 1 && p->score1 < score) //  cs 1 94
		{
			Output(p);
			q->next = p->next;
			free(p); 
			p = q->next;
			flag = 1;
		}
		else if(strcmp(p->spec,spec)==0 && lesson == 2 && p->score2 < score) //  cs 1 94
		{
			Output(p);
			q->next = p->next;
			free(p); 
			p = q->next;
			flag = 1;
		}
		else if(strcmp(p->spec,spec)==0 && lesson == 3 && p->score3 < score) //  cs 1 94
		{
			Output(p);
			q->next = p->next;
			free(p); 
			p = q->next;
			flag = 1;
		}
		else
		{
			q = p;
			p = p->next;			
		}
	}
	if(flag==0) printf("不存在此学生!\n");	
	else
	{
		printf("剩余学生:\n");
		p = H->next;
		while(p)
		{
			Output(p);
			p = p->next;
		}	
	}
}

void write(StuLink &H)//写入其他文件 
{
	StuLink p = H->next;
	FILE *w = fopen("other.txt","w");
	fprintf(w,"%s %s %s %s %s %s %s",a,b,c,d,e,f,g);
	while(p)
	{
		fprintf(w,"\n%s %s      %s       %s  %d      %d         %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
		p = p->next;
	} 
	fclose(w);
	printf("写入成功!"); 
}

int main()
{	
	StuLink H = CreateList(),temp;
	int k;
	printf("菜单\n1.写入文件\n2.随机读取学生信息\n3.查找指定学号的学生\n4.按学号顺序插入节点\n");
	printf("5.从链表中删除指定学号的学生\n6.查找某个专业的、某门课程的成绩小于某个分数的学生,返回其指针\n"); 
	printf("7.从链表中删除某个专业的、某门课程的成绩小于某个分数的学生\n8.重现菜单\n9.打印链表\n10.覆盖式写入\n0.退出\n");
	printf("请输入选项:");
	scanf("%d",&k);
	k = int(k);
	while(k)
	{
		k = int(k);
		switch(k)
		{
			case 0: 
				break;
			case 1: 
				Save(H);
				break;
			case 2:	
				Fetch(H);
				break;
			case 3: 
				temp = Search_num(H);
				if(temp)
					{	
						printf("指针为:%d\n",temp); 
						printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
						Output(temp);
					}
				else 
					printf("不存在此学生!\n");
				break;
			case 4: 
				InsertList(H);
				break;
			case 5: 
				Delete_num(H);
				break;
			case 6: 
				temp = Search_major_subject_score(H);
				if(temp)
					{
						printf("指针为:%d\n",temp); 
						printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
						Output(temp);
					}
				else 
					printf("不存在此学生!\n");
				break;
			case 7: 
				Delete_major_subject(H); 
				break;
			case 8:
				printf("菜单\n1.写入文件\n2.随机读取学生信息\n3.查找指定学号的学生\n4.按学号顺序插入节点\n");
				printf("5.从链表中删除指定学号的学生\n6.查找某个专业的、某门课程的成绩小于某个分数的学生,返回其指针\n"); 
				printf("7.从链表中删除某个专业的、某门课程的成绩小于某个分数的学生\n8.重现菜单\n9.打印链表\n10.覆盖式写入\n0.退出\n");
				break;
			case 9:
				Print_List(H);
				break;
			case 10:
				write(H);
				break;
			default:
				printf("输入有误,请重新输入!\n"); 
		} 
		printf("请输入选项:");
		scanf("%d",&k);
	}
	return 0;
}

2.txt文本文件内容:

grad name spec     class     score1 score2 score3
2201 Amy   cs        2018-1  98      95         98
2202 Bob    cs        2018-2  91      74         59
2203 Cindy  cs        2018-2  98      84         79
2204 Dell     law      2018-1  86      94         99
2205 Emy    law      2018-1  98      86         89

标签:10,next,链表,stu,实训,printf,C语言,grad,s%
来源: https://www.cnblogs.com/chengjunkai/p/16362144.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有