精华内容
下载资源
问答
  • 2.1学生成绩管理系统管理功能 11 2.2学生成绩管理系统的业务规划 11 2.3学生成绩管理系统的数据规划 14 3学生成绩管理系统的系统分析 15 3.1可行性分析 15 3.1.1 技术可行性 15 3.1.2 经济可行性 15 3.1.3 法律...
  • 学生成绩管理系统C语言实现报告,链表实现,内含流程图代码,一切以报告形式完成。
  • 学生成绩管理系统的需求分析到项目设计,从流程图设计到数据库建表,录入数据,源码讲解,到生成报告,附带项目运行详细环境配置.全方位的讲解学生成绩管理系统的制作.
  • 2 显示学分流程图;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业技术学院;北京信息职业...
  • 数据结构物流信息管理系统设计 最新资料WOR文档,录可编辑修改 TOC \o "1-5" \h \z \o "Current Document" 摘要 1 \o "Current Document" 1设计内容及...1 2.1概要设计 1 2.2功能模块详细设计 1 2.3程序流程图 4 \o
  • 2 2 c++学生成绩管理系统 告书带源代码 精品 +课设报 作者 日期 第一章 需求分析 课程设计性质和目的 ? 输入输出的形式 ? 程序的实现功能? 第二章 程序设计 概要设计 ? 详细设计 ? 调试分析? 使用说明? 测试数据? 第...
  • c++学生成绩管理系统

    2020-08-12 21:58:49
    本文包括学生成绩管理系统(链表实现)运行结果截图、自测数据、源代码、调试截图以及流程图(总体流程图和各个函数流程图)。 本人小白一枚,项目比较简陋,大神勿喷! 1. 问题描述 对班级学生的考试成绩进行统一...

    本文包括学生成绩管理系统(链表实现)运行结果截图、自测数据、源代码、调试截图以及流程图(总体流程图和各个函数流程图)。

    本人小白一枚,项目比较简陋,大神勿喷!

    1. 问题描述

    对班级学生的考试成绩进行统一管理,学生信息包括学号、姓名、数学成绩、英语成绩、物理成绩、总分。将数据存放到结构体中,用指针对节点进行操作处理。

    2. 实现功能

    1. 根据用户输入的学号,对节点进行增删查改
    2. 根据学号遍历链表节点
    3. 根据数学、英语、物理成绩以及总分排序输出学生信息

    3. 程序运行结果

    在这里插入图片描述

    4. 自测数据

    1
    2 lili 90 89 70
    1
    4 tici 98 79 86
    1
    3 wuxi 62 77 93
    1
    1 qiaz 87 78 84
    1
    5 ervi 79 81 95
    5
    4
    5
    2
    1
    qiaz 88 96 79
    6
    7
    8
    9
    3
    5
    5
    10
    

    5. 程序代码

    #include<iostream>
    #include<string>
    using namespace std;
    
    typedef struct student {
    	int id;//学号
    	string name;//姓名
    	int math;//数学
    	int english;//英语
    	int physics;//物理
    	int sum;//总分
    	struct student *next;
    }stu, *List;
    
    
    stu *head;
    void modify();//修改一个节点
    void add();//插入一个节点
    void delt();//删除一个节点
    void print_id();//遍历链表节点
    void find();//查找一个节点
    void print_sum();//排序输出全班总分
    void print_math(); //排序输出全班数学成绩
    void print_english();//排序输出全班英语成绩
    void print_physics();//排序输出全班物理成绩
    void sort(int flag);
    
    
    int main()
    {
    	head = new stu;
    	head->next = NULL;
    	int choice;
    	cout << "学生成绩管理系统\n\n";
    	cout << "1.插入一个节点\n2.修改一个节点\n3.删除一个节点\n4.查找一个节点\n5.遍历链表节点\n6.排序输出全班总分\n7.排序输出全班数学成绩\n8.排序输出全班英语成绩\n9.排序输出全班物理成绩\n10.退出\n\n\n\n";
    	cout << "输入选择(1-10): ";
    	cin >> choice;
    	while (1)
    	{
    		switch (choice)
    		{
    		case 1: add();   break;
    		case 2: modify();   break;
    		case 3: delt();   break;
    		case 4: find();   break;
    		case 5: print_id();   break;
    		case 6: print_sum();   break;
    		case 7: print_math();   break;
    		case 8: print_english();	break;
    		case 9: print_physics();	break;
    		case 10: exit(0);
    		default: cout << "输入有误!\n";   break;
    		}
    		cout << "输入选择(1-10): ";
    		cin >> choice;
    	}
    	return 0;
    }
    
    void test() {
    	if (!head) {
    		cout << "head NULL\n";
    		exit(-1);
    	}
    }
    
    void find() {
    	cout << "输入要查找学生的学号: ";
    	int id;
    	cin >> id;
    	stu *p;
    	test();
    	p = head->next;
    	while (p)
    	{
    		//cout << p->id << endl;
    		if (p->id == id)
    		{
    			cout << "学号:" << p->id << ",姓名:" << p->name << ",数学成绩:" << p->math << ",英语成绩:" << p->english << ",物理成绩:" << p->physics << ",总分:" << p->sum << endl;
    			return;
    		}
    		p = p->next;
    	}
    	cout << "学号不存在!" << endl;
    }
    
    void modify()
    {
    	cout << "输入要修改学生的学号: ";
    	int id;
    	cin >> id;
    	stu *p;
    	test();
    	p = head->next;
    	while (p)
    	{
    		//cout << p->id << endl;
    		if (p->id == id)
    		{
    			cout << "请输入修改后的名字,数学成绩,英语成绩,物理成绩: ";
    			string newname;
    			int newmath, newenglish, newphysics;
    			cin >> newname >> newmath >> newenglish >> newphysics;
    			p->sum = newmath + newenglish + newphysics;
    			p->name = newname;
    			p->math = newmath;
    			p->english = newenglish;
    			p->physics = newphysics;
    			cout << "修改成功" << endl;
    			return;
    		}
    		p = p->next;
    	}
    	cout << "学号不存在!" << endl;
    }
    
    
    void add()
    {
    	stu *p = head;
    	stu *q = new stu;
    	cout << "输入新加同学的学号,姓名,数学成绩,英语成绩,物理成绩: ";
    	cin >> q->id >> q->name >> q->math >> q->english >> q->physics;
    	q->sum = q->math + q->english + q->physics;
    	q->next = NULL;
    	if (p->next == NULL) {
    		p->next = q;
    		//p = q;
    		return;
    	}
    	
    	while (p->next != NULL) {
    		stu *temp = p;
    		p = p->next;
    		if (p->id > q->id) {
    			q->next = p;
    			temp->next = q;
    			return;
    		}
    	}
    	p->next = q;
    	//p = q;
    	return;
    }
    
    void delt()
    {
    	//system("cls");
    	stu *p, *q;
    	int id;
    	cout << "输入要删除学生的学号: ";
    	cin >> id;
    	test();
    	q = head;
    	p = q->next;
    	while (1)
    	{
    		if (p->id == id)
    		{
    			q->next = p->next;
    			delete p;
    			cout << "删除成功" << endl;
    			return;
    		}
    		q = p;
    		p = q->next;
    	}
    	cout << "学号不存在" << endl;
    }
    
    
    void print_id()
    {
    	stu *p;
    	test();
    	p = head->next;
    	sort(1);
    	while (p)
    	{
    		//cout << p->name << "      " << p->id << endl;
    		cout << "学号:" << p->id << ",姓名:" << p->name << ",数学成绩:" << p->math << ",英语成绩:" << p->english << ",物理成绩:" << p->physics << ",总分:" << p->sum << endl;
    		p = p->next;
    	}
    }
    
    void print_sum()
    {
    	stu *p;
    	test();
    	p = head->next;
    	sort(2);
    	while (p)
    	{
    		//cout << p->name << "      " << p->id << endl;
    		cout << "学号:" << p->id << ",姓名:" << p->name << ",总分:" << p->sum << endl;
    		p = p->next;
    	}
    }
    
    void print_math()
    {
    	stu *p;
    	test();
    	p = head->next;
    	sort(3);
    	while (p)
    	{
    		//cout << p->name << "      " << p->id << endl;
    		cout << "学号:" << p->id << ",姓名:" << p->name << ",数学成绩:" << p->math << endl;
    		p = p->next;
    	}
    }
    
    void print_english()
    {
    	stu *p;
    	test();
    	p = head->next;
    	sort(4);
    	while (p)
    	{
    		//cout << p->name << "      " << p->id << endl;
    		cout << "学号:" << p->id << ",姓名:" << p->name << ",英语成绩:" << p->english << endl;
    		p = p->next;
    	}
    }
    
    void print_physics()
    {
    	stu *p;
    	test();
    	p = head->next;
    	sort(5);
    	while (p)
    	{
    		//cout << p->name << "      " << p->id << endl;
    		cout << "学号:" << p->id << ",姓名:" << p->name << ",物理成绩:" << p->physics << endl;
    		p = p->next;
    	}
    }
    
    void sort(int flag) {
    	stu *p, *q;
    	if (flag == 1)
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			for (q = p->next; q != NULL; q = q->next)
    				if (p->id > q->id)//根据学号从小到大排序
    				{
    					int t1 = p->id; p->id = q->id; q->id = t1;
    					string t2 = p->name; p->name = q->name; q->name = t2;
    					int t3 = p->math; p->math = q->math; q->math = t3;
    					int t4 = p->english; p->english = q->english; q->english = t4;
    					int t5 = p->physics; p->physics = q->physics; q->physics = t5;
    					int t6 = p->sum; p->sum = q->sum; q->sum = t6;
    				}
    		}
    	}
    	else if (flag == 2)
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			for (q = p->next; q != NULL; q = q->next)
    				if (p->sum < q->sum)//根据总分从大到小排序
    				{
    					int t1 = p->id; p->id = q->id; q->id = t1;
    					string t2 = p->name; p->name = q->name; q->name = t2;
    					int t3 = p->math; p->math = q->math; q->math = t3;
    					int t4 = p->english; p->english = q->english; q->english = t4;
    					int t5 = p->physics; p->physics = q->physics; q->physics = t5;
    					int t6 = p->sum; p->sum = q->sum; q->sum = t6;
    				}
    		}
    	}
    	else if (flag == 3)
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			for (q = p->next; q != NULL; q = q->next)
    				if (p->math < q->math)//根据数学从大到小排序
    				{
    					int t1 = p->id; p->id = q->id; q->id = t1;
    					string t2 = p->name; p->name = q->name; q->name = t2;
    					int t3 = p->math; p->math = q->math; q->math = t3;
    					int t4 = p->english; p->english = q->english; q->english = t4;
    					int t5 = p->physics; p->physics = q->physics; q->physics = t5;
    					int t6 = p->sum; p->sum = q->sum; q->sum = t6;
    				}
    		}
    	}
    	else if (flag == 4)
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			for (q = p->next; q != NULL; q = q->next)
    				if (p->english < q->english)//根据英语从大到小排序
    				{
    					int t1 = p->id; p->id = q->id; q->id = t1;
    					string t2 = p->name; p->name = q->name; q->name = t2;
    					int t3 = p->math; p->math = q->math; q->math = t3;
    					int t4 = p->english; p->english = q->english; q->english = t4;
    					int t5 = p->physics; p->physics = q->physics; q->physics = t5;
    					int t6 = p->sum; p->sum = q->sum; q->sum = t6;
    				}
    		}
    	}
    	else if (flag == 5)
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			for (q = p->next; q != NULL; q = q->next)
    				if (p->physics < q->physics)//根据物理从大到小排序
    				{
    					int t1 = p->id; p->id = q->id; q->id = t1;
    					string t2 = p->name; p->name = q->name; q->name = t2;
    					int t3 = p->math; p->math = q->math; q->math = t3;
    					int t4 = p->english; p->english = q->english; q->english = t4;
    					int t5 = p->physics; p->physics = q->physics; q->physics = t5;
    					int t6 = p->sum; p->sum = q->sum; q->sum = t6;
    				}
    		}
    	}
    }
    

    6. 调试截图

    在这里插入图片描述
    在这里插入图片描述

    7. 流程图

    1. 总流程图
      在这里插入图片描述
    2. add函数流程图
      在这里插入图片描述
    3. delt函数流程图
      在这里插入图片描述
    4. find函数流程图
      在这里插入图片描述
    5. modify函数流程图
      在这里插入图片描述

    Thank you for your watch!

    展开全文
  • 输入输出的形式 程序的实现功能 第二章程序设计 概要设计 详细设计 调试分析 使用说明 测试数据 第三章 使用说明和程序流程图 程序流程图 课程设计经验和体会? 幷 P& ?/耐右? 幷 P& ?/耐右? 第一章需求分析 1课程...
  • 查询成绩信息流程图: 查询成绩信息代码部分 一、myflesgrid数据加载 With myflexgrid .CellAlignment = 4 '对齐方式中中对齐 .TextMatrix(1, 0) = &quot;考试编号&quot; .TextMatrix(1, 1) = ...

    查询成绩信息流程图:

    这里写图片描述

    查询成绩信息代码部分

    一、myflesgrid数据加载

     With myflexgrid
            .CellAlignment = 4           '对齐方式中中对齐
            .TextMatrix(1, 0) = "考试编号"
            .TextMatrix(1, 1) = "学号"
            .TextMatrix(1, 2) = "姓名"
            .TextMatrix(1, 3) = "班号"
            .TextMatrix(1, 4) = "课程名称"
            .TextMatrix(1, 5) = "分数"
        End With
    

    二、检测查询方式

    txtSQL = "select * from result_Info where "
        If Check1(0).Value Then
        ......
        End If
    
        If Check1(1).Value Then
        ......
        End If
    
         If Check1(2).Value Then
        ......
        End If

    三、判断文本框是否为空,是否为数字

    If Trim(txtSID.Text) = "" Then
                sMeg = "学号不能为空"
                MsgBox sMeg, vbOKOnly + vbExclamation, "警告"
                txtSID.SetFocus
                Exit Sub
            Else
                If Not IsNumeric(Trim(txtSID.Text)) Then
                    MsgBox "请输入数字!", vbOKOnly + vbExclamation, "警告"
                    Exit Sub
                    txtSID.SetFocus
                End If
                dd(0) = True
                txtSQL = txtSQL & "student_ID='" & Trim(txtSID.Text) & "'"
            End If
    

    四、各查询方式的叠加

    Dim dd(4) As Boolean
        If Check1(0).Value Then
            If ...
            Else...
                dd(0) = True
                txtSQL = txtSQL & "student_ID='" & Trim(txtSID.Text) & "'"
            End If
        End If
    
        If Check1(1).Value Then
            If...
            Else...
                dd(1) = True
                If dd(0) Then
                    txtSQL = txtSQL & "and student_Name='" & txtName.Text & "'"
                Else
                    txtSQL = txtSQL & "student_Name='" & txtName.Text & "'"
                End If
            End If
        End If
    
        If Check1(2).Value Then
            If ...
            Else
                dd(2) = True
                If dd(0) Or dd(1) Then
                    txtSQL = txtSQL & "and course_Name='" & txtCourse.Text & "'"
                Else
                    txtSQL = txtSQL & "course_Name='" & txtCourse.Text & "'"
                End If
            End If
        End If
    
        If Not (dd(0) Or dd(1) Or dd(2) Or dd(3)) Then
            MsgBox "请设置查询方式!", vbOKOnly + vbExclamation, "警告"
            Exit Sub
        End If

    查询成绩信息窗体的特点:多项选择的查询。

    这就涉及到了多项查询数据库内多个内容的衔接,它的逻辑是我们要着重梳理的。

    展开全文
  • c语言学生成绩管理系统

    千次阅读 2018-12-07 16:34:55
    c语言学生成绩管理系统欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左...

    功能摘要

    (1)按学期、按班级完成对学生成绩的录入。
    (2)按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行 排序
    (3)能查询学生成绩,不及格科目及学生名单
    (4)能按班级输出学生的成绩单
    (5)能按学号删除学生纪录,成绩等。
    (6)将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中(txt文 件)。
    (7)添加了一个界面可显示以保存的数据里面已有的学年、班级,方便查询
    (8)添加可自定义界面背景、字体颜色的功能

    程序界面浏览

    主界面

    结构体的定义

    typedef struct person                               //定义结构体  
    {  
        char num[15];   //学号  
        char name[20]; //姓名  
        float chinese;    //语文成绩  
        float en;      //英语成绩  
        float  math;      //数学成绩
        float  history;      //历史成绩  
        float  physics;  //物理成绩 
    	int  term;     //学期
    	int  classnum; //班级 
    	float sum;   //总分 
    	float average; //平均分 
    }person;  
    

    界面的函数封装

    减少代码的行数,方便调用,避免不停地转移光标

    void no_sql()      //数据库无信息ui界面
    {
    	system("cls");
    	toxy(45,8);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃     数据库无信息!      ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃      正在返回...        ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃                         ┃");
        toxy(45,15);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
    	Sleep(1000);
    }
    
    void printf_ui(char str[],int line,char str1[],int line1,int flag)    //自定义界面输出内容
    {
    	if(flag==1)
    	{
    		system("cls");
    	}
    	toxy(45,8);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃                         ┃");	
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃                         ┃");	
    	toxy(71,12);
    	printf("┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃                         ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
        toxy(45,16);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(45,line);
    	printf("┃  %s",str);
    	toxy(45,line1);
    	printf("┃  %s",str1);
    	toxy(56,14);
    }
    
    void printf_change(char str[],int line,char str1[],int line1,int flag)       //只改变界面某行内容
    {
    	if(flag==1)
    	{
    		system("cls");
    	}
    	toxy(45,line);
    	printf("   %s",str);
    	toxy(45,line1);
    	printf("   %s",str1);
    	toxy(56,14);
    }
    
    
    void printf_title()                             //学生界面
    {	
    	system("cls");
    	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("    学年     班级     姓名      学号            语文     英语     数学    历史    物理    总分    平均分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    }
    
    void printf_data(struct person per[],int flag)       //成绩输出界面
    {
    	for(int i=0;i<flag;i++)  
        {
            printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        }
    }
    
    

    系统已有数据显示界面

    void read_sql(struct person per[],int n)
    {
    	int flag=12,i,j,k;	
    	toxy(75,6);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(75,7);
    	printf("┃                         ┃");
    	toxy(75,8);
    	printf("┃   数据库中可查询数据:   ┃");
    	toxy(75,9);
    	printf("┃                         ┃");
    	toxy(75,10);
    	printf("┃     已有学年,班级:      ┃");
    	toxy(75,11);
    	printf("┃                         ┃");
    	toxy(75,12);
    	printf("┃                         ┃");
    	toxy(75,13);
    	printf("┃                         ┃");
    	toxy(75,14);
    	printf("┃                         ┃");
    	toxy(75,15);
    	printf("┃                         ┃");
    	toxy(75,16);
    	printf("┃                         ┃");
    	toxy(75,17);
    	printf("┃                         ┃");
    	toxy(75,18);
    	printf("┃                         ┃");
    	toxy(75,19);
    	//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(75,12);
    	for(i=0;i<n;i++)
    	{
    		printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
    		for(i=1;per[i].term!=0;i++)
    		{
    			k = 0;
    			for(j=0;j!=i;j++)
    			{
    				if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
    				{
    					
    					k = 1;
    					break;
    				}
    			}
    			if(k==0) 
    			{
    				toxy(75,++flag);
    				printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
    			}
    		}	
    	}
    	toxy(75,++flag);
    	printf("┃                         ┃");
    	toxy(75,++flag);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");	
    }
    

    系统菜单自定义

    void system_menu()
    {	
    	
    	short back_Color;
    	short text_Color;	
    	printf_ui("系统背景字体颜色修改:",10,"  请输入字体颜色代码:",12,1);
    	printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
    	printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
    	scanf("%d",&text_Color);
    	printf_ui("系统背景字体颜色修改:",10,"  请输入背景颜色代码:",12,0);
    	scanf("%d",&back_Color); 
    	char command[9]="color 3A";
    	if(text_Color>9&&text_Color<16) 
    	{
    		command[7]=text_Color-10+'A';
    	}
    	else
    	{
    		command[7]='0'+text_Color; 		//将textColor变量改为字符型	 
    	}
    	if(back_Color>9&&back_Color<16)
    	{
    		command[6]=back_Color-10+'A';
    	}
    	else
    	{
    		command[6]='0'+back_Color;		//将backColor变量改为字符型	
    	}	
    	system(command);
    	toxy(56,14);
    	Sleep(1000);
    	return;
    }
    

    成绩录入功能

    void add()                                      //成绩的录入与添加函数  
      {  
        FILE *fp;  
        int i=0,n=0;  
        char sign='y';                              //首先定义sign='y'  
        system("cls"); 								//清屏函数  系统中调用  
        person p[200]  ;                             
        while(sign!='n'&&sign!='N')                    //其实只有当输入N或n时才跳出循环  
          {  
    		printf_ui("     学生信息添加",10,"请输入学年(格式20xx):",12,1);
    		toxy(56,14);
    		scanf("%d",&p[i].term);
    		printf_ui("     学生信息添加",10,"      请输入班级:",12,1);
    		toxy(56,14);
    		scanf("%d",&p[i].classnum);
    		printf_ui("     学生信息添加",10,"      请输入姓名:",12,1);
    		toxy(56,14);
    		scanf("%s",&p[i].name);
    		printf_ui("     学生信息添加",10,"      请输入学号:",12,1);
    		toxy(56,14);
    		scanf("%s",&p[i].num);
    		printf_ui("     学生信息添加",10,"      请输入语文:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].chinese);
    		printf_ui("     学生信息添加",10,"      请输入英语:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].en);
    		printf_ui("     学生信息添加",10,"      请输入数学:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].math);
    		printf_ui("     学生信息添加",10,"      请输入历史:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].history);
    		printf_ui("     学生信息添加",10,"      请输入物理:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].physics);
    		printf_ui("      是否继续添加? ",10," 输n退出,否则继续:",12,1);
    		toxy(56,14);
    		scanf("\t%c",&sign);       
    		p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
    		p[i].average = p[i].sum / 5; 
            i++;  
            n=n+1;
    		printf_ui(" ",10,"      正在保存... ",11,1); 
    		Sleep(1000); 
            system( "cls ");  
       }
      
      
       if((fp=fopen("studata.txt","a"))==NULL)                    //以2进制形式进行文件尾追加//  
          {  
             no_sql();  
             system("pause");  
             return;                                         //如果文件出现错误 就返回  
           }  
            for(i=0;i<n;i++)  
            {
                fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);    //以2进制形式写入文件中//一次写入一个数组//  
            
            } 
            fclose(fp);                                       //关闭文件  
            system("pasue");  
      }  
    

    学生成绩总览

    void scan()                        //显示记录  进行全面信息浏览  
    {  
    	person per[200];
        FILE *fp;  
        struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
        float sum;                                         //总分  
        float s[200];  
        int i=0,n=0;  
        int j=0,k,t;  
        int m,term,flag,classnum;  
        system("cls");   
        if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
        {  
        	no_sql();
            system("pause");  
            return;  
        }
    	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
        {    
            i++;
            n=n+1;
        }
        fclose(fp);
        read_sql(per,n);
    	toxy(45,8);
    	printf_ui("     班级成绩查询",10,"请输入学年(格式20xx):",12,0);	
    	toxy(56,14);
    	scanf("%d",&term);
    	printf_ui("     班级成绩查询",10,"      请输入班级:",12,0);
    	toxy(56,14);
    	scanf("%d",&classnum);
    	system("cls");	
    	for(i=0;i<n;i++)
    	{
    	 	if(per[i].term==term&&per[i].classnum==classnum)
    	 	{
    	 		per[flag]=per[i];
    	 		flag++;	 		
    		 }
    	 }     	 
        printf_title();
        printf_data(per,flag);                            
        system("pause");  
        system("cls"); 
      }  
    

    学生信息查询

    void query()                     //学生信息的不同方式查询  
    {      
        system("cls");
        person p[200];
        FILE *fp1;  
        int i=0;
        int n=0;  
        char m;   
        toxy(45,2);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,3);
    	printf("┃                         ┃");
    	toxy(45,4);
    	printf("┃      学生成绩查询       ┃");
    	toxy(45,5);
    	printf("┃                         ┃");
    	toxy(45,6);
    	printf("┃      请输入选择:        ┃");
    	toxy(45,7);
    	printf("┃                         ┃");
    	toxy(45,8);
    	printf("┃   [ 1 ].模糊查询        ┃");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃   [ 2 ].姓名查询        ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃   [ 3 ].学号查询        ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃   [ 4 ].返回            ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
        toxy(45,16);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
    	toxy(64,6); 
    	scanf("%c",&m);  
        while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')  
        {  	
        	toxy(45,4);
    		printf("┃      学生成绩查询       ┃");
    		toxy(45,6);
    		printf("┃      请输入选择:        ┃");
    		toxy(64,6);
    	    scanf("%c",&m);  
        }  
        if((fp1=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
        {  
        	no_sql();
    		return;  
        }    
        while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        }         
        if(m=='1')                                                 //模糊查询  
        {  
            char s[3];                                             //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出  
            int i=0;  
            system("cls");  
    		printf_ui("     学生成绩查询",10,"    请输入学生的姓:",12,1); 
            scanf("%s",s);	 
    		printf_title(); 
            for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
            {  
      
              if(p[i].name[0]==s[0]&&p[i].name[1]==s[1])              //比较per[i].name与所输入的前俩个字符是否相同//  
                {  
                      
                    printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
                }
            }  
        }  
           
        if(m=='2')                                               //姓名查询  
        {  
            system("cls");
            char s[20];  
            int i=0;  
            printf_ui("     学生成绩查询",10,"    请输入学生的姓名:",12,1);
            scanf("\t%s",s);
    		printf_title();
    		for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        	{  
    
          		if((strcmp(p[i].name,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
            		{  
                  
                		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            		}		
        	}
    		i=0;    
            while(strcmp(p[i].name,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
            if(i==n)  
            {  
                no_sql();  
                return;  
            }  
    	}   
        if(m=='3')                                                            //学号查询  
        {  
          	char s[15];  
        	int i=0;  
            toxy(45,8);
    		printf_ui("     学生成绩查询",10,"    请输入学生的学号:",12,1);   
            scanf("\t%s",s);
    		printf_title();
            for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        	{  
          		if((strcmp(p[i].num,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
            		{                   
                		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            		}		
        	}
    		i=0;    
            while(strcmp(p[i].num,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
            if(i==n)  
            {  
                no_sql();  
                return;  
            }   
        }  
                fclose(fp1);
    			toxy(50,18); 
                system("pause"); 
    }  
    

    学生成绩排名

    void date()       //查询排名 
    {  	 
    	person per[200];
    	FILE *fp;  
    	struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
    	float sum,pass=60;                                         //总分  
    	float s[200];  
    	int i=0,n=0;  
    	int j=0,k,t;  
    	int term,flag,classnum,flagg; 
    	char m; 
    	system("cls"); 
    	if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
      	{  
         	no_sql();
         	return;  
        }
        
     	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
        {    
         	i++;
         	n=n+1;
        }
        fclose(fp);
        toxy(45,2);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,3);
    	printf("┃                         ┃");
    	toxy(45,4);
    	printf("┃      学生成绩排名       ┃");
    	toxy(45,5);
    	printf("┃                         ┃");
    	toxy(45,6);
    	printf("┃      请输入选择:        ┃");
    	toxy(45,7);
    	printf("┃                         ┃");
    	toxy(45,8);
    	printf("┃   [ 1 ].语文            ┃");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃   [ 2 ].英语            ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃   [ 3 ].数学            ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃   [ 4 ].历史            ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
    	toxy(45,16);
    	printf("┃   [ 5 ].物理            ┃");
    	toxy(45,17);
    	printf("┃                         ┃");
    	toxy(45,18);
    	printf("┃   [ 6 ].总分            ┃");
    	toxy(45,19);
    	printf("┃                         ┃");
    	toxy(45,20);	
    	printf("┃   [ 7 ].各科班级平均分  ┃");
    	toxy(45,21);
    	printf("┃                         ┃");
    	toxy(45,22);	   
        printf("┃   [ 8 ].不及格同学      ┃"); 
        toxy(45,23);
    	printf("┃                         ┃");
    	toxy(45,24);	   
        printf("┃   [ 0 ].返回上级        ┃"); 
        toxy(45,25);
    	printf("┃                         ┃");
        toxy(45,26);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(64,6); 
    	scanf("%c",&m);    
        while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')  
        {  
    		toxy(45,6);
    		printf("┃      请输入选择:        ┃");
    		toxy(64,6); 
    		scanf("%c",&m);   
        }	 
    	if(m=='0') 
    	{
    		return; 
    	}
     	read_sql(per,n);
     	printf_ui("     学生成绩排名",10,"请输入学年(格式20xx):",12,0); 
    	scanf("%d",&term);
    	printf_ui("     学生成绩排名",10,"      请输入班级:",12,0); 
    	scanf("%d",&classnum);
     	system("cls");
     	for(i=0;i<n;i++)        //选择符合条件的班级 
     	{
     		if(per[i].term==term&&per[i].classnum==classnum)
     	{
     		per[flag]=per[i];
     		flag++; 		
    	}
     	} 			  
    	if(m=='2')  
      	{  
          	for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
          	{  
             	k=i;  
            	for(j=i+1;j<flag;j++)
            	{
            		if(per[j].en>per[k].en)                              //排序//比较大小//  
            		{
    					k=j;
            		}
            	}
            	temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
          	}
    		printf_title();  
            printf_data(per,flag);
    		system("pause"); 
        }  	  
    	if(m=='3')  
      	{  
      	  	for(int i=0;i<flag-1;i++)  
         	{  
              	k=i;  
           		for(j=i+1;j<flag;j++)  
            	if(per[j].math>per[k].math)  
              		k=j;  
            	temp=per[k];per[k]=per[i];per[i]=temp;  
          	}  
            printf_title();
            printf_data(per,flag);            
    		system("pause"); 
        }
        if(m=='1')  
        {  
            for(int i=0;i<flag-1;i++)  
            {  
            	k=i;  
                for(j=i+1;j<flag;j++)  
                if(per[j].chinese>per[k].chinese)  
                k=j;  
                temp=per[k];per[k]=per[i];per[i]=temp;  
            }  
                printf_title();
            	printf_data(per,flag); 
    			system("pause"); 
        } 
        if(m=='4')  
      	{  
        	for(int i=0;i<flag-1;i++)  
         	{  
              	k=i;  
           		for(j=i+1;j<flag;j++)  
            	if(per[j].history>per[k].history)  
              	k=j;  
            	temp=per[k];per[k]=per[i];per[i]=temp;  
          	}  
            printf_title();
            printf_data(per,flag);
    		system("pause"); 
        }  
        if(m=='5')  
        {  
            for(int i=0;i<flag-1;i++)  
            {  
                k=i;  
               	for(j=i+1;j<flag;j++)  
                if(per[j].physics>per[k].physics)  
                k=j;  
                temp=per[k];per[k]=per[i];per[i]=temp;  
            }  
            printf_title();
            printf_data(per,flag);
    		system("pause");  
        } 
        if(m=='6')  
        {  
    		for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
            {  
                k=i;  
                for(j=i+1;j<flag;j++)
                {
                	if(per[j].sum>per[k].sum)                              //排序//比较大小//  
                	{
    					k=j;
                	}
                }
                temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
            } 
            printf_title();
            printf_data(per,flag);
    		system("pause");
        }  
    	if(m=='7')                 //各科班级平均分  
        {  
           	for(i=0;i<flag;i++)
           	{
    			s[0]=per[i].chinese+s[0]; 
    			s[1]=per[i].en+s[1];
    			s[2]=per[i].math+s[2];   
    			s[3]=per[i].history+s[3];   
    			s[4]=per[i].physics+s[4];  
    		}		
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            printf("     语文     英语     数学     历史     物理     \n");  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            printf("     %.1f     %.1f     %.1f     %.1f     %.1f    \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    		system("pause");
    
        }
    	      
    	if(m=='8')
    	{
    		printf_title();
            for(int i=0;i<flag;i++)  
            {
            	if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
    			{
                printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");        	
    			}
    		}
            system("pause");		
    	}    
    	    
    		
    }
    

    学生数据删除

    void delet()     //数据删除 
    {  
    	person p[200];
    	FILE *fp;  
    	char s[10];  
    	int i=0,n=0;  
      	if((fp=fopen("studata.txt","r"))==NULL)                  //以2进制方式读取文件信息//  
      	{  
         	no_sql(); 
         	return;  
       	} 
    	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        } 
    	fclose(fp);
    	system("cls");
    	printf_ui("     学生数据删除",10,"      请输入学号:",12,1); 
    	scanf("%s",s);  
    	i=0;
        while(strcmp(p[i].num,s)!=0&&i<n)
        {
             i++;
        }                           //进行比较 找到所需要的信息  
            if(i==n)  
             {  
                no_sql();
                return;  
             }  
        else
    	{
    	system("cls");  
        FILE *fin,*ftp;
        fin=fopen("studata.txt","r");//读打开原文件123.txt
        ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
        if(fin==NULL || ftp==NULL){
            printf("Open the file failure...\n");
            exit(0);
        }
        int kk=0;
        while(kk<n) //从原文件读取一行
        {
            if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
            {
                fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average);    //以2进制形式写入文件中//一次写入一个数组//  
            }
     
           kk++;    
        } 
        fclose(fin);
        fclose(ftp);
        remove("studata.txt");//删除原文件
        rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
        printf_ui("      删除成功!",10,"      正在返回...",12,1); 
    	Sleep(1500); 
    	} 
     
    }
    

    菜单

    int menu_select()                              //菜单选择系统函数  
    {  
         char c;  
          do{  
            system("cls");
    		char t;
    		toxy(45,2);
    		printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    		toxy(45,3);
    		printf("┃                         ┃");
    		toxy(45,4);
    		printf("┃     成绩查询管理系统    ┃");
    		toxy(45,5);
    		printf("┃                         ┃");
    		toxy(45,6);
    		printf("┃           HM            ┃");
    		toxy(45,7);
    		printf("┃                         ┃");
    		toxy(45,8);
    		printf("┃   [ 1 ].添加学生信息    ┃");
    		toxy(45,9);
    		printf("┃                         ┃");
    		toxy(45,10);
    		printf("┃   [ 2 ].班级成绩查询    ┃");
    		toxy(45,11);
    		printf("┃                         ┃");
    		toxy(45,12);
    		printf("┃   [ 3 ].学生信息搜索    ┃");
    		toxy(45,13);
    		printf("┃                         ┃");
    		toxy(45,14);
    		printf("┃   [ 4 ].学生成绩排名    ┃");
    		toxy(45,15);
    		printf("┃                         ┃");
    		toxy(45,16);
    		printf("┃   [ 5 ].删除学生信息    ┃");
    		toxy(45,17);
    		printf("┃                         ┃");
    		toxy(45,18);
    		printf("┃   [ 6 ].系统界面设置    ┃");
    		toxy(45,19);
    		printf("┃                         ┃");
    		toxy(45,20);	
    		printf("┃   [ 0 ].退出管理系统    ┃");
    		toxy(45,21);
    		printf("┃                         ┃");
    		toxy(45,22);	   
            printf("┃   请您选择(0-6):        ┃"); 
            toxy(45,23);
    		printf("┃                         ┃");
            toxy(45,24);
    		printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    		toxy(64,22); 
            c=getchar();  
         }while(c<'0'||c>'6');  
            return (c-'0');                                      //字符减去'0'得到的是数字整型//  
    }  
    

    主函数

    int main()  
    {  	
    	system("color 0F");
      	for(;;)                                                 //循环使用主界面直到遇到结束命令  
      	{   
        	switch(menu_select())                               // 函数的调用//  
          	{  
    	  		case 1:              
              		add();  //学生记录添加 
              		break;  
          		case 2: 
              		scan();  //学生信息浏览
              		break;  
          		case 3:  
              		query();  //学生信息查询
              		break;  
          		case 4:  
              		date();  //数据计算  
             		break;  
          		case 5:  
               		delet();   //数据删除 
               		break;
    			case 6:
    				system_menu(); //系统菜单修改
    				break;  
          		case 0:  
          			system("cls"); 
                	printf_ui("    感谢使用!",10,"    正在退出...",12,1); 
    				Sleep(1000);
    		        exit(0);  
          	}	  
      	}  
        system("cls");      
        return 0;
    } 
    
    
    

    代码全览

    #include<stdio.h>
    #include<string.h>
    #include<windows.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<windows.h>
    #define N sizeof(struct BOOK)
     
    typedef struct person                               //定义结构体  
    {  
        char num[15];   //学号  
        char name[20]; //姓名  
        float chinese;    //语文成绩  
        float en;      //英语成绩  
        float  math;      //数学成绩
        float  history;      //历史成绩  
        float  physics;  //物理成绩 
    	int  term;     //学期
    	int  classnum; //班级 
    	float sum;   //总分 
    	float average; //平均分 
    }person;  
    person per[200];  //定义100                                        
    void HideCursor()     //隐藏光标
    {
     CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
     SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
    }
     
    void color(short x)
    {
    	if(x>=0&&x<=15)
    	{
    		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    	}
    	else
    	{
    		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
    	}
    } 
     
    void toxy(int x, int y)      //将光标移动到X,Y坐标处
    {
    COORD pos = { x , y };
    HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(Out, pos); 
    }
    
    void no_sql()
    {
    	system("cls");
    	toxy(45,8);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃     数据库无信息!      ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃      正在返回...        ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃                         ┃");
        toxy(45,15);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
    	Sleep(1000);
    }
        
    void read_sql(struct person per[],int n)
    {
    	int flag=12,i,j,k;	
    	toxy(75,6);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(75,7);
    	printf("┃                         ┃");
    	toxy(75,8);
    	printf("┃   数据库中可查询数据:   ┃");
    	toxy(75,9);
    	printf("┃                         ┃");
    	toxy(75,10);
    	printf("┃     已有学年,班级:      ┃");
    	toxy(75,11);
    	printf("┃                         ┃");
    	toxy(75,12);
    	printf("┃                         ┃");
    	toxy(75,13);
    	printf("┃                         ┃");
    	toxy(75,14);
    	printf("┃                         ┃");
    	toxy(75,15);
    	printf("┃                         ┃");
    	toxy(75,16);
    	printf("┃                         ┃");
    	toxy(75,17);
    	printf("┃                         ┃");
    	toxy(75,18);
    	printf("┃                         ┃");
    	toxy(75,19);
    	//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(75,12);
    	for(i=0;i<n;i++)
    	{
    		printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
    		for(i=1;per[i].term!=0;i++)
    		{
    			k = 0;
    			for(j=0;j!=i;j++)
    			{
    				if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
    				{
    					
    					k = 1;
    					break;
    				}
    			}
    			if(k==0) 
    			{
    				toxy(75,++flag);
    				printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
    			}
    		}	
    	}
    	toxy(75,++flag);
    	printf("┃                         ┃");
    	toxy(75,++flag);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");	
    }
    
    void printf_ui(char str[],int line,char str1[],int line1,int flag)
    {
    	if(flag==1)
    	{
    		system("cls");
    	}
    	toxy(45,8);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃                         ┃");	
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃                         ┃");	
    	toxy(71,12);
    	printf("┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃                         ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
        toxy(45,16);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(45,line);
    	printf("┃  %s",str);
    	toxy(45,line1);
    	printf("┃  %s",str1);
    	toxy(56,14);
    }
    
    void printf_change(char str[],int line,char str1[],int line1,int flag)
    {
    	if(flag==1)
    	{
    		system("cls");
    	}
    	toxy(45,line);
    	printf("   %s",str);
    	toxy(45,line1);
    	printf("   %s",str1);
    	toxy(56,14);
    }
    
    
    void printf_title()
    {	
    	system("cls");
    	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("    学年     班级     姓名      学号            语文     英语     数学    历史    物理    总分    平均分\n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    }
    
    void printf_data(struct person per[],int flag)
    {
    	for(int i=0;i<flag;i++)  
        {
            printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        }
    }
    
    void system_menu()
    {	
    	
    	short back_Color;
    	short text_Color;	
    	printf_ui("系统背景字体颜色修改:",10,"  请输入字体颜色代码:",12,1);
    	printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
    	printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
    	scanf("%d",&text_Color);
    	printf_ui("系统背景字体颜色修改:",10,"  请输入背景颜色代码:",12,0);
    	scanf("%d",&back_Color); 
    	char command[9]="color 3A";
    	if(text_Color>9&&text_Color<16) 
    	{
    		command[7]=text_Color-10+'A';
    	}
    	else
    	{
    		command[7]='0'+text_Color; 		//将textColor变量改为字符型	 
    	}
    	if(back_Color>9&&back_Color<16)
    	{
    		command[6]=back_Color-10+'A';
    	}
    	else
    	{
    		command[6]='0'+back_Color;		//将backColor变量改为字符型	
    	}	
    	system(command);
    	toxy(56,14);
    	Sleep(1000);
    	return;
    }
    int menu_select()                              //菜单选择系统函数  
    {  
         char c;  
          do{  
            system("cls");
    		char t;
    		toxy(45,2);
    		printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    		toxy(45,3);
    		printf("┃                         ┃");
    		toxy(45,4);
    		printf("┃     成绩查询管理系统    ┃");
    		toxy(45,5);
    		printf("┃                         ┃");
    		toxy(45,6);
    		printf("┃           HM            ┃");
    		toxy(45,7);
    		printf("┃                         ┃");
    		toxy(45,8);
    		printf("┃   [ 1 ].添加学生信息    ┃");
    		toxy(45,9);
    		printf("┃                         ┃");
    		toxy(45,10);
    		printf("┃   [ 2 ].班级成绩查询    ┃");
    		toxy(45,11);
    		printf("┃                         ┃");
    		toxy(45,12);
    		printf("┃   [ 3 ].学生信息搜索    ┃");
    		toxy(45,13);
    		printf("┃                         ┃");
    		toxy(45,14);
    		printf("┃   [ 4 ].学生成绩排名    ┃");
    		toxy(45,15);
    		printf("┃                         ┃");
    		toxy(45,16);
    		printf("┃   [ 5 ].删除学生信息    ┃");
    		toxy(45,17);
    		printf("┃                         ┃");
    		toxy(45,18);
    		printf("┃   [ 6 ].系统界面设置    ┃");
    		toxy(45,19);
    		printf("┃                         ┃");
    		toxy(45,20);	
    		printf("┃   [ 0 ].退出管理系统    ┃");
    		toxy(45,21);
    		printf("┃                         ┃");
    		toxy(45,22);	   
            printf("┃   请您选择(0-6):        ┃"); 
            toxy(45,23);
    		printf("┃                         ┃");
            toxy(45,24);
    		printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    		toxy(64,22); 
            c=getchar();  
         }while(c<'0'||c>'6');  
            return (c-'0');                                      //字符减去'0'得到的是数字整型//  
    }  
      
    void add()                                      //成绩的录入与添加函数  
      {  
        FILE *fp;  
        int i=0,n=0;  
        char sign='y';                              //首先定义sign='y'  
        system("cls"); 								//清屏函数  系统中调用  
        person p[200]  ;                             
        while(sign!='n'&&sign!='N')                    //其实只有当输入N或n时才跳出循环  
          {  
    		printf_ui("     学生信息添加",10,"请输入学年(格式20xx):",12,1);
    		toxy(56,14);
    		scanf("%d",&p[i].term);
    		printf_ui("     学生信息添加",10,"      请输入班级:",12,1);
    		toxy(56,14);
    		scanf("%d",&p[i].classnum);
    		printf_ui("     学生信息添加",10,"      请输入姓名:",12,1);
    		toxy(56,14);
    		scanf("%s",&p[i].name);
    		printf_ui("     学生信息添加",10,"      请输入学号:",12,1);
    		toxy(56,14);
    		scanf("%s",&p[i].num);
    		printf_ui("     学生信息添加",10,"      请输入语文:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].chinese);
    		printf_ui("     学生信息添加",10,"      请输入英语:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].en);
    		printf_ui("     学生信息添加",10,"      请输入数学:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].math);
    		printf_ui("     学生信息添加",10,"      请输入历史:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].history);
    		printf_ui("     学生信息添加",10,"      请输入物理:",12,1);
    		toxy(56,14);
    		scanf("%f",&p[i].physics);
    		printf_ui("      是否继续添加? ",10," 输n退出,否则继续:",12,1);
    		toxy(56,14);
    		scanf("\t%c",&sign);       
    		p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
    		p[i].average = p[i].sum / 5; 
            i++;  
            n=n+1;
    		printf_ui(" ",10,"      正在保存... ",11,1); 
    		Sleep(1000); 
            system( "cls ");  
       }
      
      
       if((fp=fopen("studata.txt","a"))==NULL)                    //以2进制形式进行文件尾追加//  
          {  
             no_sql();  
             system("pause");  
             return;                                         //如果文件出现错误 就返回  
           }  
            for(i=0;i<n;i++)  
            {
                fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);    //以2进制形式写入文件中//一次写入一个数组//  
            
            } 
            fclose(fp);                                       //关闭文件  
            system("pasue");  
      }  
      
    void scan()                        //显示记录  进行全面信息浏览  
    {  
    	person per[200];
        FILE *fp;  
        struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
        float sum;                                         //总分  
        float s[200];  
        int i=0,n=0;  
        int j=0,k,t;  
        int m,term,flag,classnum;  
        system("cls");   
        if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
        {  
        	no_sql();
            system("pause");  
            return;  
        }
    	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
        {    
            i++;
            n=n+1;
        }
        fclose(fp);
        read_sql(per,n);
    	toxy(45,8);
    	printf_ui("     班级成绩查询",10,"请输入学年(格式20xx):",12,0);	
    	toxy(56,14);
    	scanf("%d",&term);
    	printf_ui("     班级成绩查询",10,"      请输入班级:",12,0);
    	toxy(56,14);
    	scanf("%d",&classnum);
    	system("cls");	
    	for(i=0;i<n;i++)
    	{
    	 	if(per[i].term==term&&per[i].classnum==classnum)
    	 	{
    	 		per[flag]=per[i];
    	 		flag++;	 		
    		 }
    	 }     	 
        printf_title();
        printf_data(per,flag);                            
        system("pause");  
        system("cls"); 
      }  
      
    void query()                     //学生信息的不同方式查询  
    {      
        system("cls");
        person p[200];
        FILE *fp1;  
        int i=0;
        int n=0;  
        char m;   
        toxy(45,2);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,3);
    	printf("┃                         ┃");
    	toxy(45,4);
    	printf("┃      学生成绩查询       ┃");
    	toxy(45,5);
    	printf("┃                         ┃");
    	toxy(45,6);
    	printf("┃      请输入选择:        ┃");
    	toxy(45,7);
    	printf("┃                         ┃");
    	toxy(45,8);
    	printf("┃   [ 1 ].模糊查询        ┃");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃   [ 2 ].姓名查询        ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃   [ 3 ].学号查询        ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃   [ 4 ].返回            ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
        toxy(45,16);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
    	toxy(64,6); 
    	scanf("%c",&m);  
        while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')  
        {  	
        	toxy(45,4);
    		printf("┃      学生成绩查询       ┃");
    		toxy(45,6);
    		printf("┃      请输入选择:        ┃");
    		toxy(64,6);
    	    scanf("%c",&m);  
        }  
        if((fp1=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
        {  
        	no_sql();
    		return;  
        }    
        while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        }         
        if(m=='1')                                                 //模糊查询  
        {  
            char s[3];                                             //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出  
            int i=0;  
            system("cls");  
    		printf_ui("     学生成绩查询",10,"    请输入学生的姓:",12,1); 
            scanf("%s",s);	 
    		printf_title(); 
            for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
            {  
      
              if(p[i].name[0]==s[0]&&p[i].name[1]==s[1])              //比较per[i].name与所输入的前俩个字符是否相同//  
                {  
                      
                    printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
                }
            }  
        }  
           
        if(m=='2')                                               //姓名查询  
        {  
            system("cls");
            char s[20];  
            int i=0;  
            printf_ui("     学生成绩查询",10,"    请输入学生的姓名:",12,1);
            scanf("\t%s",s);
    		printf_title();
    		for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        	{  
    
          		if((strcmp(p[i].name,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
            		{  
                  
                		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            		}		
        	}
    		i=0;    
            while(strcmp(p[i].name,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
            if(i==n)  
            {  
                no_sql();  
                return;  
            }  
    	}   
        if(m=='3')                                                            //学号查询  
        {  
          	char s[15];  
        	int i=0;  
            toxy(45,8);
    		printf_ui("     学生成绩查询",10,"    请输入学生的学号:",12,1);   
            scanf("\t%s",s);
    		printf_title();
            for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        	{  
          		if((strcmp(p[i].num,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
            		{                   
                		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            		}		
        	}
    		i=0;    
            while(strcmp(p[i].num,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
            if(i==n)  
            {  
                no_sql();  
                return;  
            }   
        }  
                fclose(fp1);
    			toxy(50,18); 
                system("pause"); 
    }  
                                                                               
    void date()       //查询排名 
    {  	 
    	person per[200];
    	FILE *fp;  
    	struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
    	float sum,pass=60;                                         //总分  
    	float s[200];  
    	int i=0,n=0;  
    	int j=0,k,t;  
    	int term,flag,classnum,flagg; 
    	char m; 
    	system("cls"); 
    	if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
      	{  
         	no_sql();
         	return;  
        }
        
     	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
        {    
         	i++;
         	n=n+1;
        }
        fclose(fp);
        toxy(45,2);
    	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
    	toxy(45,3);
    	printf("┃                         ┃");
    	toxy(45,4);
    	printf("┃      学生成绩排名       ┃");
    	toxy(45,5);
    	printf("┃                         ┃");
    	toxy(45,6);
    	printf("┃      请输入选择:        ┃");
    	toxy(45,7);
    	printf("┃                         ┃");
    	toxy(45,8);
    	printf("┃   [ 1 ].语文            ┃");
    	toxy(45,9);
    	printf("┃                         ┃");
    	toxy(45,10);
    	printf("┃   [ 2 ].英语            ┃");
    	toxy(45,11);
    	printf("┃                         ┃");
    	toxy(45,12);
    	printf("┃   [ 3 ].数学            ┃");
    	toxy(45,13);
    	printf("┃                         ┃");
    	toxy(45,14);
    	printf("┃   [ 4 ].历史            ┃");
    	toxy(45,15);
    	printf("┃                         ┃");
    	toxy(45,16);
    	printf("┃   [ 5 ].物理            ┃");
    	toxy(45,17);
    	printf("┃                         ┃");
    	toxy(45,18);
    	printf("┃   [ 6 ].总分            ┃");
    	toxy(45,19);
    	printf("┃                         ┃");
    	toxy(45,20);	
    	printf("┃   [ 7 ].各科班级平均分  ┃");
    	toxy(45,21);
    	printf("┃                         ┃");
    	toxy(45,22);	   
        printf("┃   [ 8 ].不及格同学      ┃"); 
        toxy(45,23);
    	printf("┃                         ┃");
    	toxy(45,24);	   
        printf("┃   [ 0 ].返回上级        ┃"); 
        toxy(45,25);
    	printf("┃                         ┃");
        toxy(45,26);
    	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
    	toxy(64,6); 
    	scanf("%c",&m);    
        while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')  
        {  
    		toxy(45,6);
    		printf("┃      请输入选择:        ┃");
    		toxy(64,6); 
    		scanf("%c",&m);   
        }	 
    	if(m=='0') 
    	{
    		return; 
    	}
     	read_sql(per,n);
     	printf_ui("     学生成绩排名",10,"请输入学年(格式20xx):",12,0); 
    	scanf("%d",&term);
    	printf_ui("     学生成绩排名",10,"      请输入班级:",12,0); 
    	scanf("%d",&classnum);
     	system("cls");
     	for(i=0;i<n;i++)        //选择符合条件的班级 
     	{
     		if(per[i].term==term&&per[i].classnum==classnum)
     	{
     		per[flag]=per[i];
     		flag++; 		
    	}
     	} 			  
    	if(m=='2')  
      	{  
          	for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
          	{  
             	k=i;  
            	for(j=i+1;j<flag;j++)
            	{
            		if(per[j].en>per[k].en)                              //排序//比较大小//  
            		{
    					k=j;
            		}
            	}
            	temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
          	}
    		printf_title();  
            printf_data(per,flag);
    		system("pause"); 
        }  	  
    	if(m=='3')  
      	{  
      	  	for(int i=0;i<flag-1;i++)  
         	{  
              	k=i;  
           		for(j=i+1;j<flag;j++)  
            	if(per[j].math>per[k].math)  
              		k=j;  
            	temp=per[k];per[k]=per[i];per[i]=temp;  
          	}  
            printf_title();
            printf_data(per,flag);            
    		system("pause"); 
        }
        if(m=='1')  
        {  
            for(int i=0;i<flag-1;i++)  
            {  
            	k=i;  
                for(j=i+1;j<flag;j++)  
                if(per[j].chinese>per[k].chinese)  
                k=j;  
                temp=per[k];per[k]=per[i];per[i]=temp;  
            }  
                printf_title();
            	printf_data(per,flag); 
    			system("pause"); 
        } 
        if(m=='4')  
      	{  
        	for(int i=0;i<flag-1;i++)  
         	{  
              	k=i;  
           		for(j=i+1;j<flag;j++)  
            	if(per[j].history>per[k].history)  
              	k=j;  
            	temp=per[k];per[k]=per[i];per[i]=temp;  
          	}  
            printf_title();
            printf_data(per,flag);
    		system("pause"); 
        }  
        if(m=='5')  
        {  
            for(int i=0;i<flag-1;i++)  
            {  
                k=i;  
               	for(j=i+1;j<flag;j++)  
                if(per[j].physics>per[k].physics)  
                k=j;  
                temp=per[k];per[k]=per[i];per[i]=temp;  
            }  
            printf_title();
            printf_data(per,flag);
    		system("pause");  
        } 
        if(m=='6')  
        {  
    		for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
            {  
                k=i;  
                for(j=i+1;j<flag;j++)
                {
                	if(per[j].sum>per[k].sum)                              //排序//比较大小//  
                	{
    					k=j;
                	}
                }
                temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
            } 
            printf_title();
            printf_data(per,flag);
    		system("pause");
        }  
    	if(m=='7')                 //各科班级平均分  
        {  
           	for(i=0;i<flag;i++)
           	{
    			s[0]=per[i].chinese+s[0]; 
    			s[1]=per[i].en+s[1];
    			s[2]=per[i].math+s[2];   
    			s[3]=per[i].history+s[3];   
    			s[4]=per[i].physics+s[4];  
    		}		
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            printf("     语文     英语     数学     历史     物理     \n");  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            printf("     %.1f     %.1f     %.1f     %.1f     %.1f    \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    		system("pause");
    
        }
    	      
    	if(m=='8')
    	{
    		printf_title();
            for(int i=0;i<flag;i++)  
            {
            	if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
    			{
                printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");        	
    			}
    		}
            system("pause");		
    	}    
    	    
    		
    }
         
    void delet()     //数据删除 
    {  
    	person p[200];
    	FILE *fp;  
    	char s[10];  
    	int i=0,n=0;  
      	if((fp=fopen("studata.txt","r"))==NULL)                  //以2进制方式读取文件信息//  
      	{  
         	no_sql(); 
         	return;  
       	} 
    	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        } 
    	fclose(fp);
    	system("cls");
    	printf_ui("     学生数据删除",10,"      请输入学号:",12,1); 
    	scanf("%s",s);  
    	i=0;
        while(strcmp(p[i].num,s)!=0&&i<n)
        {
             i++;
        }                           //进行比较 找到所需要的信息  
            if(i==n)  
             {  
                no_sql();
                return;  
             }  
        else
    	{
    	system("cls");  
        FILE *fin,*ftp;
        fin=fopen("studata.txt","r");//读打开原文件123.txt
        ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
        if(fin==NULL || ftp==NULL){
            printf("Open the file failure...\n");
            exit(0);
        }
        int kk=0;
        while(kk<n) //从原文件读取一行
        {
            if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
            {
                fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average);    //以2进制形式写入文件中//一次写入一个数组//  
            }
     
           kk++;    
        } 
        fclose(fin);
        fclose(ftp);
        remove("studata.txt");//删除原文件
        rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
        printf_ui("      删除成功!",10,"      正在返回...",12,1); 
    	Sleep(1500); 
    	} 
         //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
         //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                                 //运用switch语句进行菜单选择//  
    }
      
    int main()  
    {  	
    	system("color 0F");
      	for(;;)                                                 //循环使用主界面直到遇到结束命令  
      	{   
        	switch(menu_select())                               // 函数的调用//  
          	{  
    	  		case 1:              
              		add();  //学生记录添加 
              		break;  
          		case 2: 
              		scan();  //学生信息浏览
              		break;  
          		case 3:  
              		query();  //学生信息查询
              		break;  
          		case 4:  
              		date();  //数据计算  
             		break;  
          		case 5:  
               		delet();   //数据删除 
               		break;
    			case 6:
    				system_menu(); //系统菜单修改
    				break;  
          		case 0:  
          			system("cls"); 
                	printf_ui("    感谢使用!",10,"    正在退出...",12,1); 
    				Sleep(1000);
    		        exit(0);  
          	}	  
      	}  
        system("cls");      
        return 0;
    } 
    
    
    
    展开全文
  • PAGE PAGE 10 浙江科技学院 经济管理学院 JAVA语言课程设计报告 选题名称 简单记事本开发 学生学号 专业班级 学生姓名 学生成绩 指导教师 朱军 工作时间 2012/06/272012/06/29 目 录 选题简介 主要利用面向对象的...
  • 本系统主要是用文件和链表来完成对学生成绩信息处理。 1.输入记录模块,完成将数据存入链表中。 2、查询记录模块,完成在链表中查询学生信息。 3、更新记录模块,对学生信息的维护。 4、统计数据模块,完成对学生各...

    【注】致力于讲知识讲明白!不懂请留言!

    系统分析

    本系统主要是用文件和链表来完成对学生成绩信息处理。
    1.输入记录模块,完成将数据存入链表中。
    2、查询记录模块,完成在链表中查询学生信息。
    3、更新记录模块,对学生信息的维护。
    4、统计数据模块,完成对学生各功课的最高分和及格人数的统计。
    5 、输出记录模块, 完成对学生信息的输出.

    系统功能模块图

    在这里插入图片描述

    流程图分析

    在这里插入图片描述

    源代码分析

    定义结构体,用来存放学生信息

    struct student
    {
        char name[10];            // 姓名
        char  id[10];        	 // 学号
        float  Ynum;         	 //语文分数
        float  Snum;      		 //数学分数
        float  Enum;       		 //英语分数
        float  number;    		//总分
        student* next;
    };
    

    定义类(包含所用到函数,以及析构函数)

    class stud
    {
        student* p1, * p2, * head;
    public:
    
        ~stud()                     //析构函数(用来释放空间)
        {
    
            while (head)
            {
                p1 = head->next;
                delete head;
                head = p1;
            }
        }
        /*
        成员函数
        */
        void output(student* head);             		  //  输出学生成绩
        student* input(student* head);           		 //  增加学生记录
        student* del(student* head, char* p);  			 //  删除记录
        student* find(student* head, char* p, int& n);  // 查找学生记录(可查找多个同名数据)
        student* stat(student* head);       			//排序统计学生总分
        friend void total(student* head);  				 //统计学生总分
        student* insert(student* head);  				 //按学生总分插入记录
        student* clear(student* head);  				 // 删除当前表
        void Inputs(student* p);       					//用于添加数据的子函数
    };
    

    各个函数的实现

    //用于添加数据的子函数
    void stud::Inputs(student* p)
    {
        cout << setw(6) << "姓名" << setw(8) << " 学号"
            << setw(8) << "语文" << setw(8) << "数学"
            << setw(8) << "英语" << endl;
    
        cin >> p->name >> p->id;
        cin >> p->Ynum;
        while (cin.fail())
        {
            cerr << "您的输入有误,请重新输入" << endl;
            cin.clear();
            cin.sync();
            cin >> p->Ynum;
        }
        cin >> p->Snum;
        while (cin.fail())
        {
            cerr << "您的输入有误,请重新输入" << endl;
            cin.sync();
            cin.clear();
            cin >> p->Snum;
        }
        cin >> p->Enum;
        while (cin.fail())
        {
            cerr << "您的输入有误,请重新输入" << endl;
            cin.clear();
            cin.sync();
            cin >> p->Enum;
        }
        total(p); //计算出总分
    }
    
    //输出学生成绩
    void stud::output(student* head)
    {
        p1 = head;
        while (p1 != NULL)
        {
            cout << setw(6) << p1->name << setw(8)
                << p1->id << setw(8) << p1->Ynum
                << setw(8) << p1->Snum << setw(8)
                << p1->Enum << setw(7) << p1->number << endl;
            p1 = p1->next;
        }
    }
    
    //插入学生成绩记录
    student* stud::insert(student* head)
    {
        p1 = new student;
        Inputs(p1); //调用子函数 增加数据
    
        p2 = head;
        student* p3 = NULL;
        while ((p2->number < p1->number) && p2->next != NULL)
        {
            p3 = p2;
            p2 = p2->next;
        }
        if (p2->number > p1->number)
        {
            p1->next = p2;
            if (p3 == NULL) //  若当前值是最小的
                return p1;
            p3->next = p1;
            return head;
        }
        else
        {
            p2->next = p1;
            p1->next = NULL;
            return head;
        }
    
    
    //清空数据
    student* stud::clear(student* head)
    {
        while (head)
        {
            p1 = head->next;
            delete head;
            head = p1;
        }
        return head;
    }
    
    //排序统计函数
    student* stud::stat(student* head)
    {
        p2 = head;
        p1 = p2->next;
    
        while (p2->next)  //冒泡法
        {
    
            if (p2->number > p1->number)
            {         // 把头指针指向当前比较小的节点
                p2->next = p1->next;
                p1->next = head;
                head = p1;
    
                // 把用于比较的两个指针复位             
      //p2=head;      
                p1 = p2->next;
            }
            else
            {           // 指向下一个节点
                p2 = p2->next;
                p1 = p2->next;
            }//-------------------------------------------
    
        }
        cout << "当前表以按学生总分排序成功" << endl;
        return head;
    }
    
    //删除记录
    student* stud::del(student* head, char* p)
    {
        p1 = head;
        p2 = NULL;
    
        while (strcmp(p1->name, p) && p1->next != NULL)
        {
            p2 = p1;
            p1 = p1->next;
        }
    
        if (!strcmp(p1->name, p))
        {
            if (p1 == head)
                head = p1->next;
            else
                p2->next = p1->next;
    
            cout << "删除成功,OK" << endl;
            delete p1;
        }
        else
            cout << " 没找到姓名" << p << "的学生.\n"; //结点没找到
    
        return head;
    }
    
    //统计总分
    void total(student* p)
    {
        p->number = p->Ynum + p->Snum + p->Enum;
    
    }
    
    //查找函数
    student* stud::find(student* head, char* p, int& n)
    {
        p2 = head;
        while (strcmp(p2->name, p) != 0 && p2->next != NULL)
            p2 = p2->next;
        if (0 == strcmp(p2->name, p))
        {
            cout << setw(6) << p2->name << setw(8)
                << p2->id << setw(8) << p2->Ynum
                << setw(8) << p2->Snum << setw(8)
                << p2->Enum << setw(7) << p2->number << endl;
            n++;
            return p2;
        }
        else
            if (n == 0)
            {
                system("cls");
                cout << "对不起,没有您要查找的学生数据" << endl;
            }
        return NULL;
    }
    
    //增加学生记录
    student* stud::input(student* head)
    {
        p1 = new student;
        p2 = head;
        Inputs(p1); //调用子函数 增加数据 
        if (head == NULL)
        {
            head = p1;
            p1->next = NULL;
            return head;
        }
        while (p2->next != NULL)
            p2 = p2->next;
        p2->next = p1;
        p1->next = NULL;
    
        return head;
    }
    

    主函数实现

    int main(void)
    {
        stud stus;
        student* head = NULL;
        student* pd; //临时指针, 用于查找函数
        char choice; //用于存放用户的选择项
        char name[10];  //查找,删除记录的 key
        while (1)
        {
            system("cls");
            cout << " ☆   学 生 成 绩 管 理 系  统    ☆  " << endl;
            cout << "    ┣━━━━━━━━━-━┫" << endl;
            cout << "    ┃   1.增加学生成绩    ┃" << endl;
            cout << "    ┃   2.显示学生成绩    ┃" << endl;
            cout << "    ┃   3.排序统计成绩    ┃" << endl;
            cout << "    ┃   4.查找学生成绩    ┃" << endl;
            cout << "    ┃   5.删除学生成绩    ┃" << endl;
            cout << "    ┃   6.插入学生成绩    ┃" << endl;
            cout << "    ┃   7.清空所有数据    ┃" << endl;
            cout << "    ┃   8.安全退出系统    ┃" << endl;
            cout << "    ┗━━━━━━━━-━━┛" << endl;
            cout << " 请输入您的选择(1--8):"; cout << endl;
    
            int n = 0; //计数器,用于在查找时计算有没有同名学生
            cin >> choice;
            fflush(stdin);
    
            if (choice == '8')  //安全退出
            {
                cout << "谢谢使用,再见" << endl;
                exit(0);
            }//------------------------------------------------
            switch (choice)
            {
            case '1':
                head = stus.input(head);
                break;//------------------------------------------------
            case '2':
                if (head == NULL)
                {
                    error();
                    break;
                }
                cout << setw(6) << "姓名" << setw(8) << " 学号"
                    << setw(8) << "语文" << setw(8) << "数学"
                    << setw(8) << "英语" << setw(13) << "总分!!!" << endl;
                stus.output(head);
                _getch();
                break;//------------------------------------------------
            case '3':
                if (head == NULL)
                {
                    error();
                    break;
                }
                head = stus.stat(head);
                _getch();
                break;//------------------------------------------------
    
            case '4':
                if (head == NULL)
                {
                    error(); //调用函数输出错误信息
                    break;
                }
                cout << "请输入想要查找的学生姓名" << " ," << "本系统可以查找重复姓名学生" << endl;
                cin >> name;
                pd = head;
                cout << setw(6) << "姓名" << setw(8) << " 学号"
                    << setw(8) << "语文" << setw(8) << "数学"
                    << setw(8) << "英语" << setw(13) << "总分!!!" << endl;
    
                while (pd)   // 循环调用函数, 用于输出多个的同名学生成绩
                {
                    pd = stus.find(pd, name, n);
                    if (pd == NULL)
                        break;
                    pd = pd->next; //指针指向当前以找到的下一个节点,用于查找多个同名学生
                }
                _getch();
                break;//------------------------------------------------
            case '5':
                if (head == NULL)
                {
                    error();
                    break;
                }
                cout << "请输入想要删除学生姓名" << endl;
    
                cin >> name;
                head = stus.del(head, name);
                _getch();
                break;//------------------------------------------------
    
            case '6':
                if (head == NULL)
                {
                    error();
                    break;
                }
                head = stus.stat(head);
                head = stus.insert(head);
                break;//-----------------------------------------------
            case '7':
                if (head == NULL)
                {
                    error();
                    break;
                }
                head = stus.clear(head);
                cout << "删除表成功~" << endl;
                _getch();
                break;//-----------------------------------------------
            default:
                cout << " 对不起,您的输入有误,请重新输入。\n";
                _getch();
                break;
            }//------------------------------------------------------
        }
        _getch();
        return 0;
    }
    

    实现效果图

    在这里插入图片描述

    源码

    链接: https://pan.baidu.com/s/1Qo-I-sM2Am68MKzr2a8hDQ
    提取码:ufd5

    展开全文
  • 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学...
  • 目 录 TOC \o "1-3" \h \z \u 一运行环境 1 一运行环境 1 二设计目的和意义 2 2.1设计目的 2 2.2设计意义 2 三算法思想 2 四模块划分 5 五数据结构 5 六程序流程图 6 七程序源代码 7 八程序调试过程分析 17 九测试...
  • 学生成绩管理系统欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学...
  • Java+SQLServer2012学生信息管理系统

    万次阅读 多人点赞 2018-06-21 17:08:21
    课程设计作业在网上代码的基础上做了一些改动(增加为两个菜单:分别为学生信息管理和学生成绩管理)原网上代码:https://blog.csdn.net/su20145104009/article/details/48931025流程图:首先在SQLServer中创建三个...
  • 学生学籍管理信息系统

    热门讨论 2009-05-28 14:51:27
    学生基本信息 学生成绩信息 根据基本系统模型,逐步细化,得到描绘逻辑系统细化后的数据流。 D1 学生信息表 D3 课程信息表 学生基 本信息 课程信息 新生报到 1.2 1.3 成绩信息 注册 建档分班 课程确定 ...
  • 设计学生学籍管理系统

    热门讨论 2009-07-05 18:28:22
    该系统除了购置硬件设备外,操作简便,无须投入较大的培训费用、开发费用、维护费用等,并且在实施过程中减少手工操作的步骤、加快了对学生的学籍管理、学籍变动管理和学生成绩管理的速度。 1.3.2 技术上的可行性 本...
  • 学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。 根据课题的要求。每一个学生的包括姓名(char)、学号(char)、M门课程的...
  • 学生信息系统_流程图_粗糙.png 提示:阅读代码可以从head.c或main.c开始;运行程序从main.c开始,登陆账号在userData.txt中设置.txt 效果图1_登陆账号.png 效果图2_登陆账号2.png 效果图3_功能选择.png 效果图4_浏览...
  • 编译流程 maven编译安装zheng/pom.xml文件即可 启动顺序(后台) 准备工作 新建zheng数据库,导入project-datamodel文件夹下的zheng.sql 修改各dao模块和rpc-service模块的redis.properties、jdbc.properties...
  • java+mysql代码

    2018-05-13 18:56:55
    6.查询“方芳”老师所教的“数据库”课程成绩排名在第3~6名的学生学号、姓名,并将此记录插入新表tempScore中。(要求使用limit子句) 7.查询有两门以上课程不及格的学生学号及其平均成绩。 8.创建视图student_...
  • 学生教务系统

    2012-07-31 15:38:03
    (3)录入学生成绩 (3)按班统计学生选课情况及考试成绩。 (4)按课程统计学生名单及考试成绩。 (5)统计并输出每个同学已修学分及不及级课程。 2、题目要求 (1)按照分析、设计、编码、调试和测试过程完成...
  • Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...
  • ASP.NET精品课程+源代码

    千次下载 热门讨论 2009-01-05 20:15:51
    在案例的讲述当中要按照程序设计的基本流程进行,同时照顾到学生的认知特点讲述。分析案例,介绍一些小型网站系统的开发流程。通过总体概括性讲解,使学生对程序设计及开发有了总体框架,在与实际相结合中激发学生...
  • 如对某门课程按实际选修人数升序/降序排序,对某门课程按学生成绩升序/降序排序等;  保存:将当前系统中各类记录存入文件中,存入方式任意;  读取:可将保存在文件中的信息读入到当前系统中,供用户使用。 ...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例159 书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248  8.4 垃圾回收 250  实例161 垃圾回收的机制 250  第9章 面向对象的四大特征(教学视频:65分钟) 252  9.1 ...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

学生成绩管理代码流程图