学生成绩管理系统 C语言

其中还有些小BUG,单链表实现!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
int n;
struct student {
	char name[20];
	int xh;//学号
	int  bj;//班级
	double eng;//英语
	double math;//数学
	double C;//C语言
	double datab;//数据库
	double sjjg;//数据结构
	double avg;//平均
	double sum;// 总分
	struct student *next;//指向下一个节点
};
typedef struct student student;
student *Copylist(student *head);
//+++++++++++++++++++++++++++++++++++++++++++++++++++
student *create_list();
void add(student *head,student *newnode);            //创建 增加  输出 
void print_list(student *head);
//+++++++++++++++++++++++++++++++++++++++++++++++++++
void searchmeun();
student *search(student *head);                      //查找 
//+++++++++++++++++++++++++++++++++++++++++++++++++++
void tongjimeun();
student *tongji(student *head);                      //统计 
//+++++++++++++++++++++++++++++++++++++++++++++++++++
void paixumeun();
student *paixu(student *head);                       //排序 
//+++++++++++++++++++++++++++++++++++++++++++++++++++
int writeToFile(student *head );
student* readFromFile();                             //存取 
//+++++++++++++++++++++++++++++++++++++++++++++++++++ 
void print();                                        //主界面 
//***************************************************
void delete1(student *head);                                      //删除
//*************************************************** 
int main() {
	int g;
	student *head=NULL,*p,*newnode;

	while(1) {
		system("cls");
		print();//显示主菜单 (1)
		fflush(stdin);
		printf("请输入对应命令\n");
		scanf("%d",&g);//选择主菜单 (2)
		switch(g) {
			case 1:
				fflush(stdin);//--------------------------------------------清空缓存区
				system("cls");//清屏
				student * head, * p, * q;
				head=create_list();//调用链表   创建链表
				system("cls");
				break;
				
			case 2:
				fflush(stdin);
				system("cls");
				newnode=(student*)malloc(sizeof(student));
				printf("请输入姓名:") ;
				gets(newnode->name);
				printf("请输入学号: ");
				scanf("%d",&newnode->xh);
				printf("请输入班级: ");
				scanf("%d",&newnode->bj);
				printf("请输入英语成绩: ");
				scanf("%lf",&newnode->eng);
				printf("请输入高数成绩: ");
				scanf("%lf",&newnode->math);
				printf("请输入C语言成绩: ");
				scanf("%lf",&newnode->C);
				printf("请输入数据库成绩: ");
				scanf("%lf",&newnode->datab);
				printf("请输入数据结构成绩: ");
				scanf("%lf",&newnode->sjjg);
				newnode->sum=newnode->eng+newnode->math+newnode->C+newnode->datab+newnode->sjjg;//总分
				newnode->avg=(newnode->eng+newnode->math+newnode->C+newnode->datab+newnode->sjjg)/5.0;//平均分

				add(head,newnode);
				printf("已增加录入一名学生信息\n");
				printf("按任意键继续\n");
				getchar();// 任意输入一个字符
				system("cls");
				break;
				
			case 3:
				system("cls");
				fflush(stdin);
				if(head->next!=NULL)
					print_list(head);
				else printf("无可查信息!^_^");
				printf("按任意键继续\n");
				getchar();
				break;
				
			case 4:
				fflush(stdin);
				system("cls");
				n=1;               //n为全局变量   在循环中会发生变化 
				while(n) {
					searchmeun();
					head = search(head);
					
				}
				break;
				
			case 5:
				fflush(stdin);
				system("cls");
				n=1;
			while(n){
				tongjimeun();
				head=tongji(head);
				}
				getchar();
			    break;

			case 6:
				fflush(stdin);
				system("cls");
				paixumeun();
				int ed;        //定义ed作为switch选择 
				printf("请输入命令\n");
				scanf("%d",&ed);
				switch(ed){
					
					case 1:fflush(stdin);
						head=paixu(head);
						getchar();
						break;
					case 0:
					    printf("退出子程序,按任意键继续\n");
					    getchar();
					    break;
				}
				break;
				
			case 7:
				fflush(stdin);
				system("cls");
				printf("正在使用删除模块\n");
				delete1(head);
				break;
				
			case 8:
				fflush(stdin);
				system("cls");
				int success;
				printf("正在存盘\n");
				success=writeToFile(head);
				if(success)
				printf("存盘成功\n");
				else printf("存储不成功\n");
				fflush(stdin);
				printf("按任意键继续\n");
				getchar();
				break;	
				
			case 9:	
				fflush(stdin);
				system("cls");
				printf("正在读盘\n");
				head=readFromFile();
				if(head!=NULL)
				printf("读盘成功\n");
				else printf("读取不成功\n");
				fflush(stdin);
				printf("按任意键继续\n");
				getchar();
				break;		 

			case 0:
				exit(0);
				break;
		}
	}
	free(head);
	head=NULL;
	return 0;

}
//*******************************************************
student * create_list() { //创建链表函数

	student *head,*p,*q;

	char name1[20];
	head =(student*)malloc(sizeof(student));
	if(NULL==head) {//判断是否申请成功

		free(head);
		return NULL;
	}
	fflush(stdin);
	q=head;
	printf("请输入学生姓名\n");
	gets(name1);
	while (strlen(name1)!=0) {//判断输入然否有效
		p=(student*)malloc(sizeof(student));
		if(NULL==p)
			return head;
		strcpy(p->name,name1);
		printf("请输入学号:\n");
		scanf("%d",&p->xh);
		printf("请输入班级:\n");
		scanf("%d",&p->bj);
		printf("请输入英语成绩:\n");
		scanf("%lf",&p->eng);
		printf("请输入高数成绩:\n");
		scanf("%lf",&p->math);
		printf("请输入C语言成绩:\n");
		scanf("%lf",&p->C);
		printf("请输入数据库成绩:\n");
		scanf("%lf",&p->datab);
		printf("请输入数据结构成绩:\n");
		scanf("%lf",&p->sjjg);
		p->sum=p->eng+p->math+p->C+p->datab+p->sjjg;//总分
		p->avg=(p->eng+p->math+p->C+p->datab+p->sjjg)/5;//平均分
		q->next =p;//通过复制的头节点进行移动
		q=p;
		printf("继续录入请再次输入学生姓名,否则回车结束!\n");
		fflush(stdin);//---------------------------------------清空缓冲区
		gets(name1);//进入下一个节点
	}
	q->next = NULL;
	system("cls");
	return head;

}
//******************************************************
void add(student *head,student *newnode) { //添加学生信息
	fflush(stdin);
	student *q,*p;
	q=head;
	if(head==NULL) head=(student * )(malloc(sizeof(student)));
	p=head->next;
	while (p!=NULL) {
		if(strcmp(p->name, newnode->name)>0)//升序
			break;
		else {
			p=p->next;
			q=q->next; //寻找下一个节点
		}
	}
	q->next = newnode;
	newnode->next = p;

}

//*******************************************************
void print_list(student *head) { //输出学生信息
	student *p;
	printf("\n学生成绩如下\n");
	printf("姓名     学号     班级     英语     高数     C语言     数据库     数据结构     总分     平均分\n");
	p=head->next;
	while(p!=NULL) {
		p->avg=(p->eng+p->math+p->C+p->datab+p->sjjg)/5;
		p->sum=p->eng+p->math+p->C+p->datab+p->sjjg;
		printf("%s",p->name);
		printf("%10d%9d%8.0lf%9.0lf%10.0lf%12.0lf%11.0lf%13.0lf%10.0lf\n",p->xh,p->bj,p->eng,p->math,p->C,p->datab,p->sjjg,p->sum,p->avg);
		p=p->next;
	}
}
//****************************************************
student *search(student *head) { //查找学生信息
	fflush(stdin);//--------------------------------------清空缓存区
	student *p;
	p=head;
	int s;
	scanf("%d",&s);
	switch(s) {
		case 1: {
			fflush(stdin);
			printf("正在使用学号查找信息\n请输入学号\n");
			int  y=0;//表示输入所查询的学号
			scanf("%d",&y);
			while (p!=NULL) {
				if(p->xh==y) { //找到
					p->avg=(p->eng+p->math+p->C+p->datab+p->sjjg)/5.0;
					p->sum=p->eng+p->math+p->C+p->datab+p->sjjg;
					printf("\n学生成绩如下\n");
					printf("姓名     学号     班级     英语     高数     C语言     数据库     数据结构     总分     平均分\n");
					printf("%s",p->name);
					printf("%10d%9d%8.0lf%9.0lf%10.0lf%12.0lf%11.0lf%13.0lf%10.0lf\n",p->xh,p->bj,p->eng,p->math,p->C,p->datab,p->sjjg,p->sum,p->avg);
					printf("按任意键继续"); 
					getchar();
					break;
				} else
					p=p->next;//指向下一个  由while进行遍历 直到最后
			}
		}
		n=1;
		getchar();
		
		break;
		case 2: {
			fflush(stdin);
			char k[20]= {0};
			printf("正在使用姓名查找信息\n请输入姓名\n");
			gets(k) ;//输入所查询的姓名
			while (p!=NULL) {
				if(strcmp(p->name,k)==0) {//找到
					p->avg=(p->eng+p->math+p->C+p->datab+p->sjjg)/5.0;
					p->sum=p->eng+p->math+p->C+p->datab+p->sjjg;
					printf("\n学生成绩如下\n");
					printf("姓名     学号     班级     英语     高数     C语言     数据库     数据结构     总分     平均分\n");
					printf("%s",p->name);
					printf("%10d%9d%8.0lf%9.0lf%10.0lf%12.0lf%11.0lf%13.0lf%10.0lf\n",p->xh,p->bj,p->eng,p->math,p->C,p->datab,p->sjjg,p->sum,p->avg);
					printf("按任意键继续"); 
					getchar();
					break;
				} else
					p=p->next;//指向下一个  由while进行遍历 直到最后
			}
		}
		getchar(); 
		n=1;
		break;
		
		case 3: {
			fflush(stdin);
			int cla=0;
			printf("正在使用班级查找信息\n请输入班级\n");
			scanf("%d",&cla);
			while (p!=NULL) {
				if(p->bj==cla) { //找到
					p->avg=(p->eng+p->math+p->C+p->datab+p->sjjg)/5.0;
					p->sum=p->eng+p->math+p->C+p->datab+p->sjjg;
					printf("\n学生成绩如下\n");
					printf("姓名     学号     班级     英语     高数     C语言     数据库     数据结构     总分     平均分\n");
					printf("%s",p->name);
					printf("%10d%9d%8.0lf%9.0lf%10.0lf%12.0lf%11.0lf%13.0lf%10.0lf\n",p->xh,p->bj,p->eng,p->math,p->C,p->datab,p->sjjg,p->sum,p->avg);
					p=p->next;
				} else
					p=p->next;//指向下一个  由while进行遍历 直到最后
			}
			printf("按任意键继续"); 
			getchar();
			getchar();
			break;
		}
		
		n=1;
		getchar ();
		break;

		case 0:
			fflush(stdin);
			system("cls");
			n=0;
			break;
			
		default:
			fflush(stdin);
			printf("输入有误!\n");
			printf("请重新输入\n"); 
			printf("按任意键继续!");
			getchar(); 
			n=1;
			break;
	}
	return head;
}
//******************************************************
student *tongji(student *head) {
	//统计某班的平均分
	//统计某班高于平均分的人数
	//统计某门课程的平均分

	fflush(stdin);
	student * p;
	p = head->next;
	int f;
	scanf("%d",&f);
	switch(f) 
	{
		case 1: {//询所有学生的平均成绩
		    fflush(stdin);
			printf("正在查询所有学生的总平均成绩\n");
			double Count = 0.0;
			double allsum=0.0;
			while (p!=NULL ) {
			allsum+=p->sum;
			Count +=1.0;
			p=p->next;
			}
			printf("所有学生的平均为%.2lf\n",allsum/Count);
			}
			n=1; 
			printf("按任意键继续\n");
			getchar();
			break;
//=================================================================
		case 2: {//按课程号查询某课程的平均成绩
			fflush(stdin);
			int mn;
			printf("正在按课程号查询某课程的平均成绩\n");
			printf("请输入需查询平均成绩的课程号\n");
			printf("英语 :请输入 1    数学:请输入 2   C语言:请输入 3    数据库:请输入 4    数据结构:请输入 5\n");
			scanf("%d",&mn);
			switch(mn) 
			{
				case 1: {//英语的平均成绩
					double Count1 = 0.0;
					double allsum1=0.0;
					while (p!=NULL ) {
					allsum1+=p->eng;
					Count1 +=1.0;
					p=p->next;
					}
					printf("所有学生的英语平均分为: %.2lf\n",allsum1/Count1);
					}
					printf("按任意键继续\n");
					getchar();
					break;

				case 2: {//数学的平均成绩
					double Count2 = 0.0;
					double allsum2=0.0;
					while (p!=NULL ) {
					allsum2+=p->math;
					Count2 +=1.0;
					p=p->next;
					}
					printf("所有学生的数学平均为分%.2lf\n",allsum2/Count2);
					}
					printf("按任意键继续\n");
					getchar();
					break;

				case 3: {//C语言的平均成绩
					double Count5 = 0.0;
					double allsum5=0.0;
					while (p!=NULL ) {
					allsum5+=p->C;
					Count5 +=1.0;
					p=p->next;
					}
					printf("所有学生的C语言平均为分%.2lf\n",allsum5/Count5);
					}
					printf("按任意键继续\n");
					getchar();
					break;

				case 4: {//数据库平均成绩
					double Count3 = 0.0;
					double allsum3=0.0;
					while (p!=NULL ) {
					allsum3+=p->datab;
					Count3 +=1.0;
					p=p->next;
					}
					printf("所有学生的数据库平均分为%.2lf\n",allsum3/Count3);
					}
					printf("按任意键继续\n");
					getchar();
					break;

				case 5: {//数据结构平均成绩
					double Count4 = 0.0;
					double allsum4=0.0;
					while (p!=NULL ) {
					allsum4+=p->sjjg;
					Count4 +=1.0;
					p=p->next;
					}
					printf("所有学生的数据结构平均分为%.2lf\n",allsum4/Count4);
					}
					printf("按任意键继续\n");
					getchar();
					break;
			}
			//***************************************************内部嵌套的switch结束
		} //--------------------------------------------------//这里第二个case2结束
		
		n=1; 
		getchar();
		break;

		//===============================================================
		case 3: {//查询高于总平均分的人数
			fflush(stdin);
			printf("正在查询高于总平均分的人数\n");
			double Count6 = 0.0;
			double allsum6=0.0;
			while (p!=NULL ) {
			allsum6+=p->sum;
			Count6 +=1.0;              //先求出平均分
			p=p->next;
			}
			int qw=allsum6/Count6;//总平均成绩
			double Count7=0.0;
			while (p!=NULL ) {
				if(p->avg>qw) {
					Count7 +=1.0;              //先求出平均分
					p=p->next;
					} else p=p->next;
					}
					printf("所高于平均数的人数为%.0lf\n",Count7);
				}
				n=1; 
				printf("按任意键继续\n");
				getchar();
				break;
		case 0:
			fflush(stdin);
			printf("结束\n");
			printf("按任意键继续");
			n=0;
			break;
		default :
			fflush(stdin);
		printf("请输入正确信息\n"); 
		n=1;
		printf("按任意键继续\n");
		getchar();
		break;
	}
	return head; 
}
//**************************************************************
student *Copylist(student *head)//复制先前列表 
{
  student *newlist,*s,*p;
  int i=0,j;
  while(head!=NULL)
  {
    i++;
    s=(student *)malloc(sizeof(student));
    strcpy(s->name,head->name);
    s->xh=head->xh;
    s->bj=head->bj;
    s->eng=head->eng;
    s->math=head->math;
    s->C=head->C;
    s->datab=head->datab;
    s->sjjg=head->sjjg;
    s->avg=head->avg;
    s->sum=head->sum;
    if(i==1)
		{
		  newlist=s;
			s->next=NULL;
		}
		else   p->next=s;
    p=s;
    head=head->next;
  }
  p->next=NULL;
  printf("---复制链表成功!---\n");
  return newlist;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
student *paixu(student *head)
{
	fflush(stdin);
  char ch;
  student *first,*tail,*p_front,*min,*p,*copyhead;
	if(head==NULL)
	{
		printf("---空链表!请先新建链表或文件读取---\n");
		return head;
	}
//先复制链表,以作备份
  copyhead=Copylist(head);

  first=NULL;
  while(head!=NULL)
  {
     for(p=head,min=head;p->next!=NULL;p=p->next)
     {
        if(p->next->sum <min->sum)//p->next->sum比较小
        {
           p_front=p;       //保存最小节点的前一个节点
           min=p->next;     //保存此时链表最小的节点值
        }
     }
      //将得到的值放入有序链表中;
     if(first==NULL)
      {
        first=min;
        tail=min;
      }
     else           //有序链表中已经有节点
     {
        tail->next=min;
        tail=min;
     }
     //原链表指针后移
     if(min==head)
        head=head->next;
     else
        p_front->next = min->next;
  }
  if(first!=NULL)
    tail->next=NULL;
//完成总分排序
	system("cls");
	printf("---排序成功!排序如下--\n");
	print_list(first);
	printf("按任意键继续!"); 
	  return copyhead;
	
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void delete1 (student *head) 
{	printf("输入要删除的学生姓名\n");
	fflush(stdin); 
	char who[20];
	scanf("%s",&who); 
	student  *p,*q;
	q=head; 
	p = head->next;
	while (p!=NULL) 
       {if(strcmp(p->name,who)==0)//找到
		break;
	    else
		{ p=p->next;
		  q=q->next;
		}
       }
       if(p != NULL)  //表示找到了,是经break语句跳出循环的
        {	q->next = p->next;
		printf("名为%s 的学生已被删除。\n",p->name);
		free(p);
        p=NULL;
        printf("按任意键继续"); 
        getchar();   //防止直接闪过 
	  	}
		else
		printf("没有找到,不删除!\n");
		getchar(); 
}
//**************************************************************
int writeToFile(student *head) { //将链表写入到默认文件
	FILE *fpw = NULL; //文件指针
	student *p;

	if( NULL==head ) {
		printf("没有学生信息,无须写入文件!\n");
		return 0;
	}
	fpw = fopen("student.txt", "wb");
	if( NULL == fpw) //文件打开失败,则数据存盘失败
		return 0;

	p = head->next;
	while( p != NULL ) {
		fwrite(p,sizeof(student),1, fpw);//每次读入一个学生信息,直到结束
		p = p->next;
	}
	if( NULL!=fpw )//如果读取到了信息,就保存
		fclose(fpw);

	return 1; //返回成功标志
}
//*******************************************************
student * readFromFile() { //从默认文件(haohaninfo.txt)中读取信息
	FILE *fpr = NULL; //文件指针
	student *p, *head;

	fpr = fopen("student.txt", "rb");
	if( NULL == fpr) {
		printf("文件打开失败\n");
		return NULL;
	}

	head = (student*)malloc(sizeof(student));
	head->next = NULL;

	while( !feof(fpr) ) { //未读取文件末尾
		p = (student*)	malloc(sizeof(student));
		if(fread(p,sizeof(student),1, fpr) ) { //如果读取成功一个结点信息
			//p插入到链表头部
			p->next = head->next;
			head->next = p;
		} else //如果未读取到结点信息,则p是多余的,要释放
			free(p) ;
	}
	if( NULL!=fpr )
		fclose(fpr);

	return head; //返回链表头指针
}
//***********************************************************
void print() { //显示
	system("cls");//清屏
	printf("+======================================+\n");
	printf("|      制作人: <span style="white-space:pre">			</span>       |\n");
	printf("+======================================+\n");
	printf("|    学 生 成 绩 管 理 系 统 主 菜 单  |\n");
	printf("+======================================+\n");
	printf("|    1  重新输入所有学生信息           |\n");
	printf("|    2  补充输入一个学生信息           |\n");
	printf("|    3  输出所有成绩                   |\n");
	printf("|    4  查询子程序                     |\n");
	printf("|    5  统计汇总子系统                |\n");
	printf("|    6  排序子系统                     |\n");
	printf("|    7  删除学生信息                   |\n");
	printf("+======================================+\n");
	printf("|    8  数据存盘                       |\n");
	printf("|    9  读入学生信息                   |\n");
	printf("+======================================+\n");
	printf("|    0  退出系统                       |\n");
	printf("+======================================+\n");

}
//*********************************************************
void  searchmeun() { //查询子菜单
	system("cls");
	printf("+======================================+\n");
	printf("|    查  询  子  系  统  主  菜  单    |\n");
	printf("+======================================+\n");
	printf("|    1   按学号查询                    |\n");
	printf("|    2   按姓名查询                    |\n");
	printf("|    3   按班级查询                    |\n");
	printf("+======================================+\n");
	printf("|    0   返回上一级                    |\n");
	printf("+======================================+\n");
	printf("\n");
	printf("请输入命令:");
}
void tongjimeun() {
	system("cls");
	printf("+======================================+\n");
	printf("|    统  计  子  系  统  主  菜  单    |\n");
	printf("+======================================+\n");
	printf("|    1   统计所有学生的总平均分        |\n");
	printf("|    2   统计某门课程的平均分          |\n");
	printf("|    3   统统计某班高于总分平均分的人数|\n");
	printf("+======================================+\n");
	printf("|    0   返回上一级                    |\n");
	printf("+======================================+\n");
	printf("\n");
	printf("请输入命令:");
}
void paixumeun() {
	system("cls");
	printf("+======================================+\n");
	printf("|    排  序  子  系  统  主  菜  单    |\n");
	printf("+======================================+\n");
	printf("|    1   按总分升序排序                |\n");
	printf("+======================================+\n");
	printf("|    0   返回上一级                    |\n");
	printf("+======================================+\n");
	printf("\n");
	printf("请输入命令:");
}


#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
一、题目: 学生成绩管理系统 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 2. 要求 基本要求: 1.         要求利用C语言面向过程的编程思想来完成系统的设计; 2.       突出C语言的函数特征,以多个函数实现每一个子功能; 3.         画出功能模块图; 4.         进行简单界面设计,能够实现友好的交互; 5.         具有清晰的程序流程图和数据结构的详细定义; 6.       熟练掌握C语言对文件的各种操作。 7.       用链表实现各种操作,信息结果保存到文件中。 创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同 三、信息描述 有关该系统基本信息的描述,如:学号、姓名、系别、班级和所选科目及各科成绩等。 四、功能描述 1.       学生基本信息及成绩所选科目成绩的录入。 2.       基本信息的查询(分系、班级;分科目)与修改。 3.       对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率); 4.       对所开课程的成绩分析(求其平均成绩,最高分和最低分); 5.       对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息) 五、解决方案 1.       分析程序的功能要求,划分程序功能模块。 2.       画出系统流程图。 3.       代码的编写。定义数据结构和各个功能子函数。 4.       程序的功能调试。 5.       完成系统总结报告以及使用说明书 六、进度安排 此次课程设计时间为两周,分四个阶段完成: 1.       分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2.       编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 3.       总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。 4.       考核阶段。 七、撰写课程设计报告或课程设计总结 课程设计报告要求: 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 八、参考资料  《C语言程序设计教程》   网上相关资料(....略)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值