精华内容
下载资源
问答
  • 1. 学生成绩排序系统简介 学生成绩排序系统可实现学生信息输入、学生信息输出、学生信息查询、学生成绩排序等功能。程序要求提供简单友好易于操作的界面。程序C语言开发。 2.学生成绩管理系统基本要求: 假设有5名...
  • 系统功能 各功能中按 ‘#’ 返回主菜单 主要实现功能: 1> 输入功能input :调用函数input() 2> 查询功能search :search() 3> 修改功能modify :...9> 退出系统 Quite: 退出时提示 函数中保存数据 主函数中关闭文件
  • C语言实践学生成绩管理系统 2019年6月19日 曹永万 1.实践要求 设计“学生成绩管理系统" .实现学生信息的录入、增加、修改、剽除、浏览,以及成绩排序等功能。 2.需求分析 在程序中需要浏览学生的信息.应提供...

    C语言实践学生成绩管理系统

    2019年6月19日  曹永万
    

    1.实践要求
    设计“学生成绩管理系统" .实现学生信息的录入、增加、修改、剽除、浏览,以及成绩排序等功能。

    2.需求分析
    在程序中需要浏览学生的信息.应提供显示、查找、修改,添加、删除.排序等操作;另外还应提供键盘式选择菜单实现功能选择。提供的数据文件格式,学生的信息应该包括学号,姓名,三科成绩和平均成绩其中学号为字符型、姓名为字符型、三科成绩为整型、平均成绩为浮点型。**
    3.概要设计**
    根据上面的分析,可以将这个系统的功能划分为信息输人、信息显示、信息查询、信息修改.信息插人、信息添加、信息删除和信息排序模块。系统功能模块如图
    4. 详细设计
    模块设计据概要设计,该系统应该包含主模块和其他8个子模块组成,考虑到代码的重用,在实现时把各子模块常用的功能部分单独组织为一个公共模块。
    (1)主模块(main.c):模块里包含主函数main ,由main产生系统功能菜单,供用户选择来调用各模块完成相应工作。
    2)输入模块(input. c)模块里只有一个函数input函数作用是输入学生人数,调用公共函数完成学信息的输入和保存。input的原型如下:int input();//输入信息

    3)菜单模块(meau):呈现菜单,供用户选择,原型如下:int meau();//菜单

    4)添加模块(add.c) 模块里只有一个函数add函数,作用是输入要添加的学生人数,调用though函数完成学生信息的输入和保存。 原型:int add();//添加信息

    5)修改模块(int xiugai();//修改信息c) 模块里只有一个函数xiugai函数作用是修改指定学号的学生信息后保存。原型如下:int xiugai();//修改信息

    6)删除模块(del)模块里只有一个函数del函数作用是删除指定学号的学生信息后保存。 原型如下:int del(void);

    7)浏览模块(though) 模块里只有一个函数though函数作用是以升序的方式显示所有学生信息。原型如下:int though();//浏览信息

    8)判断模块(judge) 模块里只有一个函数judge函数作用是按照平均成绩排序并保存。原型如下:int judge();//判断学号是否存在

    9)模块里只有一个函数pai函数作用是按照平均成绩排序并保存。原型如下:int pai();//平均分排序10)memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。(void *memset(void *s, int ch, size_t n);

    函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 。 memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.)

    memcpy(name[i],name[t],sizeof(char)*20);// memcpy指的是c和c++使用的内存拷贝函数,memcpy函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中。(void *memcpy(void *dest, const void *src, size_t n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中)

    11)全局变量int id[49]={0};//存储学号char name[49][20];//二维数组存储姓名int score[49][3];//利用二维数组存储分数其中score[49][0]:存储成绩1,score[49][1]:存储成绩2,score[49][2].int t=1;利用中间变量。 5.该模块8个函数: 函数定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。而“函数声明”的作用则是把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。
    在书写形式上,函数声明可以把函数头部复制过来,在后面加一个分号;而且在参数表中可以只写各个参数的类型名,而不必写参数名。 int meau();//菜单 int input();//输入信息 int add();//添加信息 int xiugai();//修改信息 int del();//删除信息 int though();//浏览信息 int judge();//判断学号是否存在 int pai();//快速排序;
    6.头文件#include<stdio.h>#include<conio.h>#include<string.h>//头文件;在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。 .c就是你写的程序文件。头文件是用户应用程序和函数库之间的桥梁和纽带。在整个软件中,头文件不是最重要的部分,但它是C语言家族中不可缺少的组成部分。编译时,编译器通过头文件找到对应的函数库,进而把已引用函数的实际内容导出来代替原有函数。进而在硬件层面实现功能。

    代码:

    int meau(){
    int a;
    printf("\t\t\t***********************************\n\n");
    printf("\t\t\t           1.输入数据\n");
    printf("\t\t\t           2.添加数据\n");
    printf("\t\t\t           3.修改数据\n");
    printf("\t\t\t           4.删除数据\n");
    printf("\t\t\t           5.浏览数据\n");
    printf("\t\t\t           6.查找信息\n");
    printf("\t\t\t           7.按平均分排序\n");
     printf("\t\t\t           8.退出系统\n\n");
     printf("\t\t\t***********************************\n\n");
     for(;1;)
     { 
      printf("请输入选项<1-8>:[   ]\b\b\b");
      scanf("%d",&a);//功能选择
      if(a==1)
      input();
     if(a==2)
      add();
     if(a==3)
      xiugai();
     if(a==4)
      del();
     if(a==5)
      though();
     if(a==6)
      find();
      if(a==7)
      pai();
     else
      exit(0);
      
     }
     return 0;
    }
    

    菜单运行实例:
    在这里插入图片描述完整代码:
    链接:https://pan.baidu.com/s/1b_HP5lyOR2QQtjHXTkp00g
    提取码:dqvt

    展开全文
  • 程序为大学c语言实践课程综合程序学生成绩管理系统章节的作业代码,涉及二几十个函数和文件操作等。自己写的,有增加一些功能,让程序更为完整,代码部分应该有能改进的空间,希望能帮到大家
  • C语言编写学生成绩信息管理系统

    千次阅读 多人点赞 2020-07-06 18:27:13
    C语言设计学生成绩信息管理系统介绍代码结构体数组的定义main_interface()函数add_infor()函数browse_infor()函数 介绍 软件方面采用的是Visual Studio 2019 IDE工具。 程序方面采用结构体数组,成员包括学号、...

    介绍

    • 软件方面采用的是 Visual Studio 2019 IDE 工具。
    • 程序方面采用结构体数组,成员包括学号、姓名以及一科成绩。程序整体采用分模块编程形式,包括主函数在内共10个函数,实现功能有信息的录入、浏览、查询、修改、删除、数据保存到文件以及成绩的排序。程序比较简单,结构体成员只有三个,没有什么技术含量,后期看看有没有能力用链表来编写这个程序。

    代码

    • 结构体数组的定义

    函数开始前,是结构体数组的定义。这里直接使用typedef定义结构体数组,一步到位。后续可用STUDENT来进行变量声明了


    • home_page() 函数

    这个是主界面的显示函数,完整的声明为:void home_page(),无形参,无返回值,单纯用printf()函数打印的界面。
    完整代码

    void home_page()
    {
    	printf("\n\t\t******************************** \n");
    	printf("\t\t     学生成绩信息管理系统       \n\n");
    	printf("\t\t        1、录入信息            \n\n");
    	printf("\t\t        2、浏览信息            \n\n");
    	printf("\t\t        3、查询信息            \n\n");
    	printf("\t\t        4、修改信息            \n\n");
    	printf("\t\t        5、成绩排序            \n\n");
    	printf("\t\t        6、删除信息            \n\n");
    	printf("\t\t        7、向文件写入数据       \n\n");
    	printf("\t\t        8、从文件读出数据       \n\n");
    	printf("\t\t        9、退出系统            \n\n");
    	printf("\t\t******************************** \n\n");
    }
    

    运行效果
    在这里插入图片描述
    其中,“输入标号选择功能:”字样是在 main() 函数中调用 home_page() 函数后,打印的提示语。


    • add_infor() 函数

    这是实现信息录入功能的函数,完整的函数声明是:int add_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值n+i是添加完信息后的结构体数组的总个数。函数内部,i变量是每次添加的信息的个数,sign变量作为连续输入的标志。这里判断是否连续输入,我原来用的方法是判断stu[n+i].num的值是否为-1,编译成功没有报错,但是实际运行过程中会出现一些问题,应该是逻辑上的问题。我暂且换成每输入一条信息后,判断是否继续输入第二条信息,实际使用时会有一些繁琐,但总体效果相差无几。
    完整代码

    int add_infor(STUDENT stu[], int n)
    {
    	int i = 0;
    	char sign = 'Y';
    
    	while ((sign == 'Y') || (sign == 'y'))
    	{
    		printf("\n\t\t\t学号:");
    		scanf("\t\t%s", stu[n + i].num);
    		printf("\t\t\t姓名:");
    		scanf("\t\t%s", stu[n + i].name);
    		printf("\t\t\t成绩:");
    		scanf("\t\t%f", &stu[n + i].score);
    
    		printf("\n\t\t\t是否继续录入?(Y/N):");
    		sign = getchar();
    
    		i++;
    	}
    
    	return (n + i);
    }
    

    上述代码在 Visual Studio 2019 IDE 中编译时,scanf()函数会报出警告,警告代码为:C6031,说明为:返回值被忽略。解决方法有两个,第一种是将scanf替换为scanf_s,我没有采用这种方法,因为scanf_s并不是 C 语言中的,而是 Visual Studio 开发工具提供的一个功能相同的安全标准输入函数,如果换为scanf_s,在另一个编译器下就可能会出问题;第二种是使用#define _CRT_SECURE_NO_WARNINGS 1,具体做法可百度查找,经实测,这种方法是可行的。但是,如果两种方法都不采取,即不消除这个警告,实际上对程序的正确运行也没有影响。
    运行效果
    在这里插入图片描述
    “录入学生成绩信息”字样由 main() 函数在调用 add_infor() 函数前打印


    • browse_infor() 函数

    这是实现浏览录入信息功能的函数,完整声明为:void browse_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,无返回值。函数内部,i是作为循环控制变量,传入数组个数n,然后通过 for 循环,依次打印出结构体成员的值。
    完整代码

    void browse_infor(STUDENT stu[], int n)
    {
    	int i;
    
    	printf("\n\n");
    	printf("\t\t学号\t姓名\t成绩\n\n");
    
    	for (i = 0; i < n; i++)
    	{
    		printf("\t\t%s\t%s\t %3.1f\n",stu[i].num,stu[i].name,stu[i].score);
    	}
    }
    

    运行效果
    在这里插入图片描述
    “浏览学生成绩信息”字样由 main() 函数在调用 browse_infor() 函数前打印


    • find_infor() 函数

    这是实现信息查找功能的函数,完整的声明为:void find_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,无返回值。函数内部,又分为通过学号查找和通过姓名查找两种方式,变量option存放键入的选项,两个字符串数组分别存放查找的学号和姓名。先选择查找方式,输入对应方式的值,然后遍历数组,通过strcmp()函数判断数组中是否有与输入相同的值,若无相同的值则显示“未找到!”的信息,若有相同值则将该结构体成员的信息打印到屏幕上。
    完整代码

    void find_infor(STUDENT stu[], int n)
    {
    	int option;
    	int i = 0;
    	char search_num[10] = { 0 };
    	char search_name[20] = { 0 };
    
    	printf("\n\t\t\t1、按学号查找\n");
    	printf("\t\t\t2、按姓名查找\n");
    	printf("\n\t\t\t请选择相应的选项:");
    	scanf("%d",&option);
    
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入要查找的学号:");
    		scanf("%s", search_num);
    
    		while ((strcmp(stu[i].num, search_num) != 0) && i < n)
    		{
    			i++;
    		}
    	}
    
    	if (2 == option)
    	{
    		printf("\n\t\t请输入要查找的姓名:");
    		scanf("%s", search_name);
    
    		while ((strcmp(stu[i].name, search_name) != 0) && i < n)
    		{
    			i++;
    		}
    	}
    
    	if (i == n)
    	{
    		printf("\n\t\t未找到!");
    		return;
    	}
    
    	printf("\n\t\t学号:%s\n", stu[i].num);
    	printf("\t\t姓名:%s\n", stu[i].name);
    	printf("\t\t成绩:%3.1f\n", stu[i].score);
    }
    

    从上述代码中可以看到,在定义两个字符串数组时,均赋了初值0,若此处没有赋初值0时,上段代码在 Visual Studio 2019 IDE 中编译时,strcmp()函数会报警告,警告代码为:C6054,说明为:可能没有为字符串“xxx”添加字符串零终止符。深入了解strcmp()函数可以知道,其功能是两个字符串自左向右逐个字符相比(按 ASCII 值大小相比较),直到出现不同的字符或遇 ‘\0’ 为止。所以此处在定义字符串数组时,将其初始化为 ‘\0’ ,即char search_num[10] = { 0 };,就可以消除此类警告。
    运行效果
    在这里插入图片描述


    • modify_infor() 函数

    这是实现信息修改功能的函数,函数声明为:int modify_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n。函数内部,可选择通过学号查找修改和通过姓名查找修改两种方式。查找部分与void find_infor(STUDENT stu[], int n)函数一致;修改部分有修改学号、姓名、成绩三个选项,修改的实现形式是:通过查找部分得出待修改的数组下标,然后通过strcpy()函数,将输入的修改后的学号和姓名赋值给下标对应的成员,分数的修改则直接赋值。
    完整代码

    int modify_infor(STUDENT stu[], int n)
    {
    	int option, choice;
    	int i = 0;
    	char old_temp[20] = { 0 };
    	char new_temp[20] = { 0 };
    	float new_score;
    
    	printf("\n\t\t\t1、按学号查找修改\n");
    	printf("\t\t\t2、按姓名查找修改\n");
    	printf("\n\t\t请输入选项选择功能:");
    	scanf("%d", &option);
    
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入学号:");
    		scanf("%s", &old_temp);
    
    		while ((strcmp(stu[i].num, old_temp) != 0) && i < n)
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\n\t\t未找到!");
    		}
    	}
    
    	if (2 == option)
    	{
    		printf("\n\t\t请输入姓名:");
    		scanf("%s", &old_temp);
    
    		while ((strcmp(stu[i].name, old_temp) != 0) && i < n)
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\n\t\t未找到!");
    		}
    	}
    
    	printf("\n\t\t待修改学生的信息:\n");
    	printf("\n\t\t学号:%s\n\t\t姓名:%s\n\t\t成绩:%3.1f\n", stu[i].num, stu[i].name, stu[i].score);
    
    	printf("\n\t\t请选择要修改的信息(1.学号 2.姓名 3.成绩):");
    	scanf("%d", &choice);
    
    	if (1 == choice)
    	{
    		printf("\n\t\t输入修改后的学号:");
    		scanf("%s", &new_temp);
    
    		strcpy(stu[i].num, new_temp);
    		printf("\t\t修改成功!\n");
    	}
    
    	if (2 == choice)
    	{
    		printf("\n\t\t输入修改后的姓名:");
    		scanf("%s", &new_temp);
    
    		strcpy(stu[i].name, new_temp);
    		printf("\t\t修改成功!\n");
    	}
    
    	if (3 == choice)
    	{
    		printf("\n\t\t输入修改后的成绩:");
    		scanf("%f", &new_score);
    
    		stu[i].score = new_score;
    		printf("\t\t修改成功!\n");
    	}
    }
    

    此函数中的两个字符串数组在定义时,也需要赋初值,以消除函数strcmp()strcpy()使用时的警告。
    运行效果
    在这里插入图片描述


    • sort_score() 函数

    此函数完整声明为:void sort_score(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,实现的功能是排序,用的是冒泡排序法,按从小到大的顺序给成绩排序。具体实现形式就是,通过两层循环,外层循环是排序趟数,内层循环是每趟比较的次数,相邻两元素比较,若前者大于后者,则两者进行交换,此时为顺序,即从小到大;若前者小于后者且两者交换,则为逆序,即从大到小。此函数为顺序,且在交换两者值时,学号和姓名使用strcpy()函数,成绩的交换使用指针。
    完整代码

    void sort_score(STUDENT stu[], int n)
    {
    	int i, j;
    	float * p, * q, s;
    	char temp[20];
    
    	for (i = 0; i < n - 1; i++)
    	{
    		for (j = 0; j < n - 1 - i; j++)
    		{
    			if (stu[j].score > stu[j + 1].score)
    			{
    				strcpy(temp, stu[j].num);
    				strcpy(stu[j].num, stu[j + 1].num);
    				strcpy(stu[j + 1].num, temp);
    
    				strcpy(temp, stu[j].name);
    				strcpy(stu[j].name, stu[j+1].name);
    				strcpy(stu[j+1].name,temp);
    
    				p = &stu[j].score;
    				q = &stu[j + 1].score;
    				s = *p;
    				*p = *q;
    				*q = s;
    			}
    		}
    	}
    }
    

    运行效果
    在这里插入图片描述


    • delete_infor() 函数

    此函数是信息删除函数,完整声明为:int delete_infor(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值是删除后的数组个数。函数内部,可通过按学号和按姓名两种方式查找并删除,其中查找部分与void find_infor(STUDENT stu[], int n)函数一致;删除部分的实现形式是,从查找部分获得找到的数组下标,从下标处开始,将后一值赋给前一值,直至数组的末尾,以此实现删除的功能。
    完整代码

    int delete_infor(STUDENT stu[], int n)
    {
    	char search_num[10] = { 0 };
    	char search_name[20] = { 0 };
    	int i = 0;
    	int j;
    	int option;
    	
    	printf("\n\t\t\t1、按学号查找删除\n");
    	printf("\t\t\t2、按姓名查找删除\n");
    	printf("\n\t\t\t请输入选项选择功能:");
    	scanf("%d", &option);
    	
    	system("cls");
    
    	if (1 == option)
    	{
    		printf("\n\t\t请输入要删除的学生的学号:");
    		scanf("%s", &search_num);
    
    		while ((strcmp(stu[i].num, search_num)) != 0 && (i < n))
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\t\t未找到!\n");
    			return n;
    		}
    	}
    	
    	if (2 == option)
    	{
    		printf("\n\t\t请输入要删除的学生的姓名:");
    		scanf("%s", &search_name);
    
    		while ((strcmp(stu[i].num, search_name) != 0) && (i < n))
    		{
    			i++;
    		}
    
    		if (i == n)
    		{
    			printf("\t\t未找到!\n");
    			return n;
    		}
    	}
    
    	for (j = i; j < n; j++)
    	{
    		strcpy(stu[j].num, stu[j + 1].num);
    		strcpy(stu[j].name, stu[j + 1].name);
    		stu[j].score = stu[j + 1].score;
    	}
    
    	printf("\t\t删除成功!\n");
    	return (n - 1);
    }
    

    注意此函数的返回值,由于删除了一条信息,即从结构体数组中删除了一项,所以返回值应当是传入参数n减去1之后的值,即返回值return (n-1);
    运行效果
    在这里插入图片描述


    • writetofile() 函数

    此函数的功能是将录入的数据保存到文件中,完整声明为:void writetofile(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n。函数内部,用 FILE 结构体类型定义文件类型的指针变量 fp,输入要写入的文件的名称,然后以只写 “w” 的方式,向文件写入数据,若指定的文件不存在则创建它,如果存在则先删除它再重建一个新文件,首先向文件内写结构体数组的个数,然后通过 while 循环,将所有信息写入文件中,最后fclose(fp)关闭文件。
    完整代码

    void writetofile(STUDENT stu[], int n)
    {
    	FILE* fp;
    	int i = 0;
    	char filename[20] = { 0 };
    	
    	printf("\n\t\t\t请输入文件名称:");
    	scanf("%s", filename);
    
    	if ((fp = fopen(filename, "w")) == NULL)
    	{
    		printf("\n\t\t\t打开文件失败!\n");
    		return;
    	}
    
    	fprintf(fp, "%d\n", n);
    
    	while (i < n)
    	{
    		fprintf(fp, "%-6s%-10s%3.1f\n", stu[i].num, stu[i].name, stu[i].score);
    		i++;
    	}
    
    	fclose(fp);
    
    	printf("\n\t\t\t写入文件成功!\n");
    }
    

    由于只需要向文件写数据,所以fopen()中 mode 参数只需要"w"即可,数据写入文件成功后,一定要使用fclose(fp)关闭文件。
    运行效果
    在这里插入图片描述
    在这里插入图片描述
    “向文件写入数据”字样由 main() 函数在调用 writetofile() 函数前打印


    • readfromfile() 函数

    此函数的功能是从文件中读出数据,完整声明为:int readfromfile(STUDENT stu[], int n),形参为结构体数组stu[]和结构体数组个数n,返回值为读入数据后的数组总个数。函数内部,用 FILE 结构体类型定义文件类型的指针变量 fp,输入要读出数据的文件的名称,以只读方式,通过 while 循环,从文件中读出数据,存放到数组中,然后将读到的数据个数加上传进的参数 n 作为返回值,最后关闭文件。
    完整代码

    int readfromfile(STUDENT stu[], int n)
    {
    	FILE* fp;
    	int i, num;
    	char filename[20];
    
    	i = 0;
    
    	printf("\n\t\t\t请输入文件名称:");
    	scanf("%s", filename);
    
    	if ((fp = fopen(filename, "r")) == NULL)
    	{
    		printf("\n\t\t\t无法打开文件!\n");
    
    		return n;
    	}
    
    	fscanf(fp, "%d", &num);
    
    	while (i < num)
    	{
    		fscanf(fp, "%-5s%-10s%3.1f\n", stu[n + i].num, stu[n + i].name, stu[n + i].score);
    		i++;
    	}
    
    	n += num;
    	fclose(fp);
    
    	printf("\n\t\t\t读出数据成功!\n");
    
    	return n;
    }
    

    同样,在打开文件并执行操作完毕后,需要fclose(fp)来关闭文件。注意,此函数的返回值应该是读到的数据个数 num 加上传进的参数 n ,返回的才是此时总的数组个数。
    运行效果
    在这里插入图片描述
    “从文件读出数据”字样由 main() 函数在调用 readfromfile() 函数前打印


    • main() 函数

    main函数部分,主要是由while(1)死循环构成的,循环内部首先调用home_page()函数显示主界面,然后通过 switch-case 语句,来匹配用户输入的选项。

    完整代码

    int main()
    {
    	int select = 0;
    	int n = 0;
    
    	while (1)
    	{
    		system("cls");
    		
    		home_page();
    
    		printf("\t\t输入标号选择功能: ");
    		scanf("%d", &select);
    
    		switch (select)
    		{
    			case 1:
    				system("cls");
    				printf("\n\t\t********录入学生成绩信息********\n");
    				n = add_infor(stu, n);
    				break;
    			case 2:
    				system("cls");
    				printf("\n\t\t********浏览学生成绩信息********\n");
    				browse_infor(stu, n);
    				getchar();
    				break;			
    			case 3:
    				system("cls");
    				printf("\n\t\t**********查询学生信息**********\n");
    				find_infor(stu, n);
    				getchar();
    				break;
    			case 4:
    				system("cls");
    				printf("\n\t\t*********修改学生信息*********\n");
    				n = modify_infor(stu, n);
    				getchar();
    				break;
    			case 5:
    				system("cls");
    				printf("\n\t\t*********按成绩排序*********\n");
    				sort_score(stu, n);
    				printf("\n\t\t\t排序成功!");
    				getchar();
    				break;	
    			case 6:
    				system("cls");
    				printf("\n\t\t*********删除学生信息*********\n");
    				n = delete_infor(stu, n);
    				getchar();
    				break;
    			case 7:
    				system("cls");
    				printf("\n\t\t********向文件写入数据********\n");
    				writetofile(stu, n);
    				getchar();
    				break;
    			case 8:
    				system("cls");
    				printf("\n\t\t********从文件读出数据********\n");
    				n = readfromfile(stu, n);
    				getchar();
    				break;
    			default:
    				system("cls");
    				printf("\n\n\t\t**********谢谢使用!**********\n");
    				exit(0);
    				break;
    		}
    
    		getchar();
    	}
    }
    

    注意,switch-case 语句的每个 case 结束都应加上break;,且最后要加上default,同时,为了美观,在每个 case 语句调用函数前,都加上system("cls")清屏函数;在调用后,加上getchar ()语句等待用户操作。


    • 完整代码

    链接: 完整代码

    结束语

    第一次写博客,方方面面的都有些不熟悉,脑子里有很多想法,但无从下手,拿了以前写的程序作主要内容,进行一次尝试。虽然内容啥的都很简单,程序也没有什么技术含量,但这是一次从0到1的尝试吧,以后也会继续努力。文中如有错误之处,还请指正,如遇大佬,还请多多指教!

    展开全文
  • 本文实例为大家分享了C语言学生成绩管理系统的具体代码,供大家参考,具体内容如下 一、本设计涉及的重要C语言知识有: 1.单链表的各种操作 2.文件流的操作 3.单链表的排序 二、本设计主要以下几个模块组成 1.学生...
  • 3. 程序设计成绩排序名:cxsj.txt(文本文件) 二、记录结构和全局变量 typedef struct { char xh[12]; /*学号*/ char xm[12]; /*姓名*/ char sxcj[5]; /*数学成绩*/ char cxsj[5]; /*程序设计成绩*/ char zf...
  • 学生成绩管理系统需要维护一组学生成绩信息,实现增删查改统计排序以及读取保存,使用结构体数组。 文件的读写需要用到c语言文件操作函数。 显示学生成绩信息功能分为三个小功能:根据目生成绩信息数量遍历学生...
  • 学生成绩管理系统\n"); printf("***********************************\n"); printf("1 录入成绩\n"); printf("2 输出成绩\n"); printf("3 修改成绩\n"); printf("4 ...
  • C语言程序设计结课实验:学生管理系统。本系统通过多模块化设计进行开发,包含三个.c文件(main.c、function.c和extra.c)、一个function.h文件和一个student.txt文件。实现的功能有:对学生的学号自动分配,对学生...
  • C语言编写 学生成绩管理系统

    万次阅读 多人点赞 2012-06-23 12:16:23
    /* (程序头部注释开始) ...* 文件名称: 学生成绩管理系统 * 作 者: 刘江波 * 完成日期: 2012 年 6 月 23 日 * 版 本 号: v.623 * 对任务及求解方法的描述部分 * 程序头部的注释结束 */

    /* (程序头部注释开始)
    * 程序的版权和版本声明部分
    * Copyright (c) 2011, 烟台大学计算机学院学生
    * All rights reserved.
    * 文件名称: 学生成绩管理系统
    * 作 者: 刘江波
    * 完成日期: 2012 年 6 月 23 日
    * 版 本 号: v.623

    * 对任务及求解方法的描述部分
    * 程序头部的注释结束
    */

    #include "stdio.h"
    
    #include"string"
    
    /*定义学生结构体*/
    
    struct Student
    
    {
    
         char ID[20];
    
         char Name[20];
    
         float Mark1;
    
         float Mark2;
    
         float Mark3;
    
         float Average;
    
    };
    
    
    /*声明学生数组及学生数量*/
    
    struct Student students[1000];
    
    int num=0;
    
     
    
    /*求平均值*/
    
    float Avg(struct Student stu)
    
    {
    
         return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
    
    }
    
     
    
    /*通过学号返回数组下标*/
    
    int Student_SearchByIndex(char id[])
    
    {
    
         int i;
    
         for (i=0;i<num;i++)
    
         {
    
             if (strcmp(students[i].ID,id)==0)
    
             {
    
                  return i;
    
             }
    
         }
    
         return -1;
    
    }
    
     
    
    /*通过姓名返回数组下标*/
    
    int Student_SearchByName(char name[])
    
    {
    
         int i;
    
         for (i=0;i<num;i++)
    
         {
    
             if (strcmp(students[i].Name,name)==0)
    
             {
    
                  return i;
    
             }
    
         }
    
         return -1;
    
    }
    
     
    
    /*显示单条学生记录*/
    
    void Student_DisplaySingle(int index)
    
    {
    
         printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
    
         printf("-------------------------------------------------------------\n");
    
         printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
    
                  students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
    
    }
    
     
    
    /*插入学生信息*/
    
    void Student_Insert()
    
    {
    
         while(1)
    
         {
    
             printf("请输入学号:");
    
             scanf("%s",&students[num].ID);
    
             getchar();
    
     
    
             printf("请输入姓名:");
    
             scanf("%s",&students[num].Name);
    
             getchar();
    
     
    
             printf("请输入成绩:");
    
             scanf("%f",&students[num].Mark1);
    
             getchar();
    
     
    
             printf("请输入成绩:");
    
             scanf("%f",&students[num].Mark2);
    
             getchar();
    
     
    
             printf("请输入成绩:");
    
             scanf("%f",&students[num].Mark3);
    
             getchar();
    
     
    
             students[num].Average=Avg(students[num]);
    
             num++;
    
     
    
             printf("是否继续?(y/n)");
    
             if (getchar()=='n')
    
             {
    
                  break;
    
             }
    
         }
    
     
    
    }
    
     
    
    /*修改学生信息*/
    
    void Student_Modify()
    
    {
    
         //float mark1,mark2,mark3;
    
         while(1)
    
         {
    
             char id[20];
    
             int index;
    
             printf("请输入要修改的学生的学号:");
    
             scanf("%s",&id);
    
             getchar();
    
             index=Student_SearchByIndex(id);
    
             if (index==-1)
    
             {
    
                  printf("学生不存在!\n");
    
             }
    
             else
    
             {
    
                  printf("你要修改的学生信息为:\n");
    
                  Student_DisplaySingle(index);
    
                  printf("-- 请输入新值--\n");
    
    
                  printf("请输入学号:");
    
                  scanf("%s",&students[index].ID);
    
                  getchar();
    
    
                  printf("请输入姓名:");
    
                  scanf("%s",&students[index].Name);
    
                  getchar();
    
    
                  printf("请输入成绩:");
    
                  scanf("%f",&students[index].Mark1);
    
                  getchar();
    
    
                  printf("请输入成绩:");
    
                  scanf("%f",&students[index].Mark2);
    
                  getchar();
    
    
                  printf("请输入成绩:");
    
                  scanf("%f",&students[index].Mark3);
    
                  getchar();
    
    
                  students[index].Average=Avg(students[index]);
    
             }
    
             printf("是否继续?(y/n)");
    
             if (getchar()=='n')
    
             {
    
                  break;
    
             }
    
         }
    
    }
    
     
    
    /*删除学生信息*/
    
    void Student_Delete()
    
    {
    
         int i;
    
         while(1)
    
         {
    
             char id[20];
    
             int index;
    
             printf("请输入要删除的学生的学号:");
    
             scanf("%s",&id);
    
             getchar();
    
             index=Student_SearchByIndex(id);
    
             if (index==-1)
    
             {
    
                  printf("学生不存在!\n");
    
             }
    
             else
    
             {
    
                  printf("你要删除的学生信息为:\n");
    
                  Student_DisplaySingle(index);
    
                  printf("是否真的要删除?(y/n)");
    
                  if (getchar()=='y')
    
                  {
    
                       for (i=index;i<num-1;i++)
    
                       {
    
                           students[i]=students[i+1];//把后边的对象都向前移动
    
                       }
    
                       num--;
    
                  }
    
                  getchar();
    
             }
    
             printf("是否继续?(y/n)");
    
             if (getchar()=='n')
    
             {
    
                  break;
    
             }
    
         }
    
    }
    
     
    
    /*按姓名查询*/
    
    void Student_Select()
    
    {
    
         while(1)
    
         {
    
             char name[20];
    
             int index;
    
             printf("请输入要查询的学生的姓名:");
    
             scanf("%s",&name);
    
             getchar();
    
             index=Student_SearchByName(name);
    
             if (index==-1)
    
             {
    
                  printf("学生不存在!\n");
    
             }
    
             else
    
             {
    
                  printf("你要查询的学生信息为:\n");
    
                  Student_DisplaySingle(index);
    
             }
    
             printf("是否继续?(y/n)");
    
             if (getchar()=='n')
    
             {
    
                  break;
    
             }
    
         }
    
    }
    
     
    
    /*按平均值排序*/
    
    void Student_SortByAverage()
    
    {
    
         int i,j;
    
         struct Student tmp;
    
         for (i=0;i<num;i++)
    
         {
    
             for (j=1;j<num-i;j++)
    
             {
    
                  if (students[j-1].Average<students[j].Average)
    
                  {
    
                       tmp=students[j-1];
    
                       students[j-1]=students[j];
    
                       students[j]=tmp;
    
                  }
    
             }
    
         }
    
    }
    
     
    
    /*显示学生信息*/
    
    void Student_Display()
    
    {
    
         int i;
    
         printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
    
         printf("-------------------------------------------------------------\n");
    
         for (i=0;i<num;i++)
    
         {
    
             printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
    
                  students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
    
         }
    
    }
    
     
    
    /*将学生信息从文件读出*/
    
    void IO_ReadInfo()
    
    {
    
         FILE *fp;
    
         int i;
    
         if ((fp=fopen("Database.txt","rb"))==NULL)
    
         {
    
             printf("不能打开文件!\n");
    
             return;
    
         }
    
         if (fread(&num,sizeof(int),1,fp)!=1)
    
         {
    
             num=-1;
    
         }
    
         else
    
         {
    
             for(i=0;i<num;i++)
    
             {
    
                  fread(&students[i],sizeof(struct Student),1,fp);
    
             }
    
         }
    
         fclose(fp);
    
    }
    
     
    
    /*将学生信息写入文件*/
    
    void IO_WriteInfo()
    
    {
    
         FILE *fp;
    
         int i;
    
         if ((fp=fopen("Database.txt","wb"))==NULL)
    
         {
    
             printf("不能打开文件!\n");
    
             return;
    
         }
    
         if (fwrite(&num,sizeof(int),1,fp)!=1)
    
         {
    
             printf("写入文件错误!\n");
    
         }
    
         for (i=0;i<num;i++)
    
         {
    
             if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
    
             {
    
                  printf("写入文件错误!\n");
    
             }
    
         }    
    
         fclose(fp);
    
    }
    
     
    
     
    
    /*主程序*/
    
    void main()
    
    {
    
         int choice;
    
         IO_ReadInfo();
    
         while(1)
    
         {
    
             /*主菜单*/
    
             printf("\n------ 学生成绩管理系统------\n");
    
             printf("1. 增加学生记录\n");
    
             printf("2. 修改学生记录\n");
    
             printf("3. 删除学生记录\n");
    
             printf("4. 按姓名查询学生记录\n");
    
             printf("5. 按平均成绩排序\n");
    
             printf("6. 退出\n");
    
             printf("请选择(1-6):");
    
             scanf("%d",&choice);
    
             getchar();
    
             switch(choice)
    
             {
    
             case 1:
    
                  Student_Insert();
    
                  break;
    
             case 2:
    
                  Student_Modify();
    
                  break;
    
             case 3:
    
                  Student_Delete();
    
                  break;
    
             case 4:
    
                  Student_Select();
    
                  break;
    
             case 5:
    
                  Student_SortByAverage();
    
                  Student_Display();
    
                  break;
    
             case 6:
    
                  exit(0);
    
                  break;
    
             }
    
             IO_WriteInfo();
    
         }
    
    }
    


    展开全文
  • * 欢迎使用学生成绩管理系统 * * 1. 建立文件储存记录 2. 增加学生记录 3. 新建学生信息文件 4. 显示记录 * * 5. 文件存储 6. 读取文件 7. 删除记录 8. 修改记录 * * 9. 查询记录 10.对记录进行排序 11.测试程序 12....
  • c语言学生成绩管理系统

    热门讨论 2013-03-14 22:27:45
    一、题目: 学生成绩管理系统 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题...
  • 附录程序#include"stdio.h"#include#include#include"process.h"#include"ctype.h"typedef struct{char num[10];char name[10];int chinese;int math;int english;int dianlu;double aver;}Student;Student stu[99];...

    附录程序

    #include"stdio.h"

    #include

    #include

    #include"process.h"

    #include"ctype.h"

    typedef struct

    {

    char num[10];

    char name[10];

    int chinese;

    int math;

    int english;

    int dianlu;

    double aver;

    }Student;

    Student stu[99];

    int shuru(Student stud[],int n)/* 输入若干条记录 */

    {

    int i=0;

    char sign,x[10];

    double a=0.0;

    while(sign!='n'&&sign!='N')

    {

    printf(" 输入学生学号 :");

    scanf("%s",stu[n+i].num);

    printf(" 输入学生 :");

    scanf("%s",stu[n+i].name);

    printf(" 输入学生的语文、数学、英语、电路分数 :");

    scanf("%d%d%d%d",&stu[n+i].chinese,&stu[n+i].math,&stu[n+i].english,&stu[n+i].d

    ianlu);

    a=1.0*(stu[n+i].chinese+stu[n+i].math+stu[n+i].english+stu[n+i].dianlu)/4;

    stu[n+i].aver=a;

    gets(x); /* 清除多余的输入 */

    printf(" 是否继续输入 ?(Y/N):\n");

    scanf("%c",&sign);

    i++;

    }

    return(n+i);

    }

    . . .

    void xianshi(Student stud[],int n) /* 显示所有记录 */

    {

    int i ;

    printf("\n"); /* 格

    式头 */

    printf(" 学号 语文 数学 英语 电路 平均成绩 \n");

    printf("\n");

    for(i=0;i

    {

    printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10.2lf\n",stu[i].num,stu[i].name,stu[i]

    .chinese,stu[i].math,stu[i].english,stu[i].dianlu,stu[i].aver);

    }

    }

    void xiugai(Student stud[],int n)/* 修改 */

    {

    int i=0,choice=1;

    char x[10];

    while(choice!=0)

    { printf(" 请输入您要修改的学生的学号 :\n");

    scanf("%s",x);

    for(i=0;;i++)

    {

    if(strcmp(stu[i].num,x)==0) break;

    }

    printf(" 请选择您要修改的容: \n");

    printf(" \n");

    printf("| 请按 1 |\n");

    printf("

    展开全文
  • ​ 由于计算机技术的飞速发展,C语言作为一项编程的基础语言,它对计算机行业有着很大的贡献,我们组计划用C语言编写一个学生信息管理系统,主要用来对学生基本信息的管理,使教师对学生信息进一步了解,为老师提供...
  • C语言学生成绩管理系统详解

    千次阅读 2020-06-07 10:53:22
    使用单向链表和文件作为基本数据结构,设计一个学生成绩管理程序,管理某学校学生成绩。 [1]插入数据 [2]修改对应数据项的数据 [3]删除对应学号的信息 [4]查找某学号的信息 [5]查找不及格学生 [6]对学生成绩进行排名...
  • 学生成绩管理系统文件为c程序,不附带论文内容~
  • 用C++实现的课程成绩统计程序,以条为单位存储学生成绩信息,可以以二进制存到文件中,可以输入,查看,修改,统计学分绩和单科排名,学分绩排名。
  • 学生成绩管理:(结构体数组、函数、指针、算法、流程结构及文件等的综合应用)程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,...
  • 本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能:  1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,...
  • C语言程序设计》实训报告——学生成绩管理系统 一、课程设计题目 《学生成绩管理系统》 二、课程设计要求 综合利用顺序、选择、循环等各种程序结构,使用自定义函数和二维数组,完成任务。 三、课程设计思路 3.1...
  • 学生成绩管理系统(基于链表和文件读写操作) 本程序为作者的大一下学期的c语言期末作业,如有问题和不足,欢迎大家指出共同探讨。 程序主要实现的功能有:学生信息的录入(动态链表创建),输出所有学生信息(链表遍历),...
  • 1、原始数据从键盘上输入后保存在文件中,程序用到数据时到相应文件中存取,最后的结果也应存放在文件中; 2、计算每个学生三门功课的平均分,并按平均分排列名次;若平均分相同则名次并列;将结果写入文件。 3、...
  • 之前发布了简易的学生成绩管理系统:https://blog.csdn.net/kcyxws/article/details/105151639 今天这个版本,使用了结构体、文件指针。可将信息自定义保存到txt中,并且可以在txt读入信息。 本程序未使用动态申请...
  • 这个版本,使用了结构体、文件指针。可将信息自定义保存到txt中,并且可以在txt读入信息。 本程序未使用动态申请内存,最大学生数量为50人。 整体程序结构较为严谨,多处验证。

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 269
精华内容 107
关键字:

c语言程序学生成绩系统文件

c语言 订阅