C语言实现学生信息管理系统(多文件)

本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下

elemtype.h

/*****************************
* 这是学生成绩管理系统中的记录结构文件。
* 文件名:elemtype.h
* 作者:
* 创建日期:2012-12-05
* 完成日期:2012-12-07
* 版本:1.0
* 修改记录:
*
*
******************************/

#ifndef ELEMTYPE
#define ELEMTYPE

#include <stdio.h>
//用宏定义来规定各个字符串数据项的最大长度。
//定义姓名最大长度
#define MAX_NAME 30
//定义学生课程数量
#define SCORE_NUM 3

/*学生分类信息*/
typedef enum
{
  SCIENCE =0,//理科
  ARTS,//文科
  MEDICINE,//医科
  OTHER//其它
}StuType;

/*学生信息结构体*/
typedef struct
{
  char  name[MAX_NAME+1];//学生姓名
  StuType type;//学生分类,具体定义见学生分类信息
  int  ID;//学号
  float  score[SCORE_NUM];//所修课程分数
}ElemType;

/*函数功能:
 从文件中读取数据并保存到数组中,n为文件中保存的记录条数
 参数说明:
 filename-数据文件名称
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 true-成功添加了一条记录;
 false-添加记录不成功
*/
bool ReadDataFromFile(char *filename, ElemType array[], int n);

/*函数功能:
 显示所有学生信息
 参数说明:
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 无
*/
void DispalyAll(ElemType array[], int n);

/*函数功能:
 修改学生信息,即从控制台输入一个学生信息,根据该信息在数组中进行查找并修改
 参数说明:
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 true-成功修改了一条记录
 false-修改记录不成功
*/
bool ModifyStudentInfo(ElemType array[],int n);

/*函数功能:
 计算某一科目平均分
 参数说明:
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 -1-没有找到对应记录
 对应记录的下标
*/
void CalcSubjectScore(ElemType array[], int n );

/*函数功能:
 根据学号查找学生,计算其平均分
 参数说明:
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 -1-没有找到对应记录
 对应记录的下标
*/
void CalcStudentScore(ElemType array[], int n );

/*函数功能:
 添加学生信息,即从控制台输入一条学生信息,然后将输入的学生信息保存到数组中
 参数说明:
 n-数组中当前保存的有效记录条数
 array-用于存储学生信息的数组
 返回值:
 true-成功添加了一条记录,提示:此种情况下n需要增加1
 false-添加记录不成功
*/
void SortStu(ElemType array[], int n);

/*函数功能:
 把数组中的数据写到文件中保存
 参数说明:
 filename-数据文件名称
 n-数组中当前保存的记录条数
 array-用于存储学生信息的数组
 返回值:
 true-成功添加了一条记录;
 false-添加记录不成功
*/
bool WriteDataToFile(char *filename, ElemType array[], int n); 

#endif

elemtype.cpp

#include "elemtype.h"
#include <stdlib.h>
#include <string.h>

//
///function
///从文件中读取学生信息,保存到一个足够大的数组中。
bool ReadDataFromFile(char *filename, ElemType array[], int n)
{
 FILE* fp;
 int i;
 if ((fp=fopen(filename,"rb"))==NULL )
 {
 return false;
 }

 for (i=0; i<n; i++)
 {
 fread(array+i,sizeof(ElemType),1,fp);
 }

 fclose(fp);

 return true;
}

void DispalyAll(ElemType array[], int n)
{
 //add your code here
 int i;
 printf("%s%10s%9s%12s%10s%10s\n","NAME","TYPE","ID","SCORE1","SCORE2","SCORE3");
 for(i=0;i<n;i++)
 {
 printf("%s",array[i].name);
 switch(array[i].type)
 {
 case 0:
 printf("%10s","SCIENCE");
 break;
 case 1:
 printf("%10s","ARTS");
 break;
 case 2:
 printf("%10s","MEDICIEN");
 break;
 case 3:
 printf("%10s","OTHER");
 default:
 break;
 }
 printf("%10d%10.2f%10.2f%10.2f\n",array[i].ID,array[i].score[0],array[i].score[1],array[i].score[2]);
 }
 printf("\n");
}

bool ModifyStudentInfo(ElemType array[],int n)
{
 //add your code here
 int number;
 int i,j;
 printf("输入需要修改学生信息的学生学号:");
 scanf("%d",&number);

 for(i=0;i<n;i++)
 {
 if(number==array[i].ID)
 {
 printf("请输入该同学的新信息,按姓名,学科种类,学号,各科成绩的顺序\n");
 printf("(学科种类只需填对应代码---理科0,文科1,医科2,其他3):\n");
 scanf("%s %d %d",array[i].name,&array[i].type,&array[i].ID);
 for(j=0;j<SCORE_NUM;j++)
 {
 scanf("%f",&array[i].score[j]);
 }

 return true;
 break;
 }
 }
 return false;
}

void CalcSubjectScore(ElemType array[], int n)
{
 //add your code here
 int i,j;
 float sum[SCORE_NUM]={0},ave[SCORE_NUM];
 for(j=0;j<SCORE_NUM;j++)
 {
 for(i=0;i<n;i++)
 {
 sum[j]=sum[j]+array[i].score[j];
 }
 ave[j]=sum[j]/n;
 }
 for(j=0;j<SCORE_NUM;j++)
 {
 printf("科目 %d 均分:%.2f\n",j+1,ave[j]);
 }
}

void CalcStudentScore(ElemType array[], int n)
{
 //add your code here

 int findID,i,j;
 float sum=0;
 printf("请输入查找学生的学号:");
 scanf("%d",&findID);
 for(i=0;i<n;i++)
 {
 if(findID==array[i].ID)
 {
 for(j=0;j<SCORE_NUM;j++)
 {
 sum=sum+array[i].score[j];
 }
 break;
 }
 }
 printf("该学生总分为:%.2f\n",sum);
}

void SortStu(ElemType array[], int n)
{
 //add your code here
 int j;
 printf("请输入添加的学生信息(按姓名,学科种类,学号,各科分数的顺序)\n");
 printf("(学科种类只需输入对应代码---理科0,文科1,医科2,其他3):\n");
 scanf("%s %d %d",array[n].name,&array[n].type,&array[n].ID);
 for(j=0;j<SCORE_NUM;j++)
 {
 scanf("%f",&array[n].score[j]);
 }
 n=n+1;
 printf("添加成功!\n");
 DispalyAll(array,n);
}

//
///function
///把数组中所有有效记录以二进制形式保存到文件中
bool WriteDataToFile(char *filename, ElemType array[], int n)
{
 //add your code here
 int i;
 FILE* fp;
 if( (fp=fopen(filename,"rw"))==NULL )
 {
 printf("cannot open file\n");
 return false;
 }

 for(i=0;i<n+1;i++)
 {
 fwrite(array+i,sizeof(ElemType),1,fp);
 }
 fclose(fp);
 return true;
}

main.cpp

//这是主测试文件

#include "elemtype.h"
#define MAX_STUDENT_NUM 100

void displayInfo();
void run(ElemType* array, int n);

int main()
{
 int n = 5;//n 为数组中有效记录条数,初始文件中为5
 ElemType total[MAX_STUDENT_NUM];
 char filename[] = "student.dat";
 if (!ReadDataFromFile(filename,total,n))
 {
 printf("打开文件%s失败",filename);
 }
 displayInfo();
 run(total,n);

 return 0;
}

//
///function
void displayInfo()
{
 puts("********************************************************************" );
 puts("  欢迎使用x大学计算机(软件)学院学生管理系统V1.0" );
 puts("********************************************************************\n" );

}

//
///function
void run(ElemType* array, int n)
{
 int option = 0; 

 //提示用户选择操作
 puts(" ");
 puts("请选择操作:\n" );
 puts("0:直接退出 ");
 puts("1:显示所有学生信息 ") ;
 puts("2:修改某个学生信息 ") ;
 puts("3:计算所有学生某一科平均分 ") ;
 puts("4:计算某一个学生分数 ") ;
 puts("5:添加一个学生信息 ") ;
 puts("6:写回文件并退出 \n" ) ;

 do
 {
 scanf("%d", &option );

 //根据用户选择调用相关函数完成指定的操作
 switch(option )
 {
  //显示所有学生信息
 case 1:
 DispalyAll(array,n);
 break;

  //修改某个学生信息
 case 2:
 {
 if( ModifyStudentInfo(array,n) )
 {
  printf("\n");
  DispalyAll(array,n);
  printf("修改成功!\n");
 }
 else
  printf("未找到此学生!\n");
 }
 break;

 //计算所有学生某一科平均分
 case 3:
 CalcSubjectScore(array,n);
 break; 

 //计算某一个学生分数
 case 4:
 CalcStudentScore(array,n);
 break;

 //添加一个学生信息
 case 5:
 SortStu(array,n);
 break;

 //写回文件并退出
 case 6:
 {
 if( WriteDataToFile("student.dat",array,n) )
 {
  printf("保存成功!\n");
  DispalyAll(array,n+1);
 }
 break;
 }
 default:
 break;
 }
 }while(option != 0 );
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简单学生学籍管理系统

    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #define N 100 /*存储100个学生的学籍信息*/ int flag; /*标记是否登录*/ struct date /*出生日期*/ { int year; int month; int day; }; struct

  • C语言实现简单学生管理系统

    花了一个月的时间,学习了链表,文件,多文件编程,然后就开始写学生管理系统,比较简单的那种,实现了增,添,改,查,多种排序,输入的时候的限定,成绩分析的功能.遇到的问题很多,也尝试解决了,下面写点写学生管理系统的要注意的地方,希望对别人有帮助. 1.一定要先写好主函数的框架,然后再往上面加东西,这样说有点笼统,我把我的主函数在下面,可以借鉴下哈.我的主函数是一个while(1)的无限循环,里面一个switch选择,利用一个菜单函数,让其返回值当成switch选择的值,然后进入不同的功能主函数,其他

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • 学生成绩管理系统C语言代码实现

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct person //定义结构体 { char num[10]; //学号 char name[20]; //姓名 float cyuyan; //C语言成绩 float en; //物理学成绩 float ji; //原子物理成绩

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言学生成绩管理系统源代码

    大学C语言实训课,C语言学生成绩管理系统,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; float kaoshi; double zongping; }stu[4]; void main() { void a(); void b(); void

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • C语言学生管理系统源码分享

    本文实例为大家分享了C语言学生管理系统源码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 int const MAX_LENGTH=100; //学生信息结构体数组,最多可以存放100个学生信息 struct student{ int id; //学号 char *name; //姓名 int age; //年龄 float c_score; //C语言成绩 float engl

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

随机推荐