http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html

实验题目:学生信息管理系统

实验要求:用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。

提示:用一个结构体类型表示学生信息

typedef struct node /*定义结构体*/
{
int num; //学号
char name[];//姓名
char sex[]; //性别
int age; //年龄
int english; //英语成绩
int math; //数学成绩
int computer;//计算机成绩
int average; //平均成绩
struct node *next; //链表指针域
}student_info;

运行过程中采用一个结构体链表存储学生信息。退出系统时可以采用文件存储用户输入的信息,再次运行的时候从文件中读取。

完整C语言程序分为三个文件,student.h、student.cpp和main.c文件。具体实现如下所示:

student.h文件中定义学生信息结构体,操作函数声明。

#ifndef STUDENT_HEAD
#define STUDENT_HEAD typedef struct node /*定义结构体*/
{
int num; //学号
char name[];//姓名
char sex[]; //性别
int age; //年龄
int english; //英语成绩
int math; //数学成绩
int computer;//计算机成绩
int average; //平均成绩
struct node *next; //链表指针域
}student_info; //学生信息链表
extern student_info* student_list; //全局变量声明 //初始化函数声明
//初始化学生信息链表
void init_student_info_list();
//判断学生信息链表是否为空
int student_list_empty(); //操作函数声明
//向学校信息表中添加学生信息记录
int add_student_info();
//根据学号删除学生信息
int delete_student_info(int num);
//根据学号修改学生信息
int modify_student_info(int num);
//根据学号查找学生信息
student_info* search_student_info(int num);
//输出每个学生的平均成绩
void display_average();
//显示所有学生信息
void display_student_info();
//将学生信息保存到文件
int save_file();
//从文件中读取学生信息
int read_file();
#endif

student.c文件中是对student.h文件中声明的函数进行定义,给出具体的实现代码。

#include "student.h"
#include <stdio.h>
#include <string.h>
#include <malloc.h> //初始化学生信息链表
void init_student_info_list()
{
//学生信息链表头结点
student_list = (student_info*)malloc(sizeof(student_info));
student_list->next = NULL;
}
//判断学生信息链表是否为空
int student_list_empty()
{
return student_list->next == NULL;
}
//操作函数实现
//向学校信息表中添加学生信息记录
int add_student_info()
{
student_info *pstu = (student_info*)malloc(sizeof(student_info));
if(pstu == NULL)
{
printf("内存分配失败.\n");
return ;
}
printf("请按要求一次输入学生的信息.\n");
printf("请输入学号: ");
scanf("%d",&pstu->num);
//判断该学号是否已经存在
if(search_student_info(pstu->num) != NULL)
{
printf("该学号已经存在学生信息表中.\n");
return ;
}
printf("请输入姓名: ");
getchar();
gets(pstu->name);
printf("请输入性别: ");
scanf("%s",pstu->sex);
printf("请输入年龄: ");
scanf("%d",&pstu->age);
printf("请输入英语成绩: ");
scanf("%d",&pstu->english);
printf("请输入数学成绩: ");
scanf("%d",&pstu->math);
printf("请输入计算机成绩: ");
scanf("%d",&pstu->computer);
pstu->average = (pstu->english + pstu->math + pstu->computer)/;
//每次从学生信息链表的头部插入;
pstu->next = student_list->next;
student_list->next = pstu;
return ;
}
//根据学号删除学生信息
int delete_student_info(int num)
{
student_info *pstu;
student_info *qstu;
if(search_student_info(num) == NULL)
{
printf("不存在该学好为%d的学生信息.\n",num);
return ;
}
pstu = student_list->next;
qstu = student_list;
while(pstu->num != num)
{
qstu = pstu;
pstu = pstu->next;
}
qstu->next = pstu->next;
free(pstu);
return ;
}
//根据学号修改学生信息
int modify_student_info(int num)
{
int choice;
student_info *pstu = search_student_info(num);
if(pstu == NULL)
{
printf("不存在该学好为%d的学生信息.\n",num);
return ;
}
printf("1.姓名 2.性别 3.年龄 4.英语成绩 5.数学成绩 6.计算机成绩.\n");
printf("请选择修改的信息: ");
scanf("%d",&choice);
switch(choice)
{
case :
printf("请输入新的姓名: ");
getchar();
gets(pstu->name);
break;
case :
printf("请输入新的性别: ");
scanf("%s",pstu->sex);
break;
case :
printf("请输入新的年龄: ");
scanf("%d",&pstu->age);
break;
case :
printf("请输入新的英语成绩: ");
scanf("%d",&pstu->english);
break;
case :
printf("请输入新的数学成绩: ");
scanf("%d",&pstu->math);
break;
case :
printf("请输入新的计算机成绩: ");
scanf("%d",&pstu->computer);
break;
default:
printf("请按提示要求操作.\n");
}
return ;
}
//根据学号查找学生信息
student_info* search_student_info(int num)
{
student_info *pstu;
pstu = student_list->next;
while(pstu && pstu->num != num)
{ pstu = pstu->next;
}
return pstu;
}
//输出每个学生的平均成绩
void display_average()
{
student_info *pstu;
pstu = student_list->next;
while(pstu)
{
printf("学号为%d,姓名为%s的学生平均成绩为: %d\n",pstu->num,pstu->name,pstu->average);
pstu = pstu->next;
}
}
//显示所有学生信息
void display_student_info()
{
student_info *pstu;
pstu = student_list->next;
printf("所有学生信息如下所示.\n");
printf("学号\t姓名\t性别\t年龄\t英语\t数学\t计算机\t平均成绩.\n");
while(pstu)
{
printf("%d\t",pstu->num);
printf("%s\t",pstu->name);
printf("%s\t",pstu->sex);
printf("%d \t",pstu->age);
printf("%d \t",pstu->english);
printf("%d \t",pstu->math);
printf("%d \t",pstu->computer);
printf("%d\n",pstu->average);
pstu = pstu->next;
}
}
//将学生信息保存到文件
int save_file()
{
FILE *pfile;
student_info *pstu;
pfile = fopen("student.txt","w");
if(pfile == NULL)
{
printf("打开文件失败.\n");
return ;
}
pstu = student_list->next;
while(pstu)
{
fprintf(pfile,"%5d%15s%9s%3d%4d%4d%4d%4d",pstu->num,pstu->name,pstu->sex,pstu->age,
pstu->english,pstu->math,pstu->computer,pstu->average);
pstu = pstu->next;
}
fclose(pfile);
return ;
} //从文件中读取学生信息
int read_file()
{
FILE *pfile;
student_info *pstu;
pfile = fopen("student.txt","r");
if(pfile == NULL)
{
printf("打开文件失败.\n");
return ;
}
while(!feof(pfile))
{
pstu = (student_info*)malloc(sizeof(student_info));
fscanf(pfile,"%5d%15s%9s%4d%4d%4d%4d%4d",&pstu->num,pstu->name,pstu->sex,&pstu->age,
&pstu->english,&pstu->math,&pstu->computer,&pstu->average);
pstu->average = (pstu->english + pstu->math + pstu->computer)/;
//每次从学生信息链表的头部插入;
pstu->next = student_list->next;
student_list->next = pstu;
}
fclose(pfile);
return ;
}

主函数main.c文件进行测试调用,如下所示:

#include "student.h"
#include <stdlib.h>
#include <stdio.h> void menu(); //学生信息链表
student_info* student_list; //用户可以选择1-7可以分别进行学生信息的查看、添加、删除,修改,计算平均成绩,保存,退出系统操作。
int main()
{
int choice;
int num;
printf("**************************\n");
printf("欢迎使用学生信息管理系统\n");
printf("**************************\n");
printf("-----------------------------\n");
init_student_info_list();
if(read_file())
printf("从文件中读取学生信息成功.\n");
else
printf("从文字中读取学生信息失败.\n");
printf("-----------------------------\n");
menu();
while()
{
printf("请选择操作: ");
scanf("%d",&choice);
switch(choice)
{
case :
if(student_list_empty())
printf("学生信息表为空,请先添加学生信息.\n");
else
display_student_info();
break;
case :
if(add_student_info())
printf("添加学生信息成功.\n");
else
printf("添加学生信息失败.\n");
break;
case :
if(student_list_empty())
printf("学生信息表为空,请先添加学生信息.\n");
else
{
printf("请输入要删除学生信息的学号: ");
scanf("%d",&num);
if(delete_student_info(num))
printf("成功删除该学号对应的学生信息.\n");
else
printf("删除失败.\n");
}
break;
case :
if(student_list_empty())
printf("学生信息表为空,请先添加学生信息.\n");
else
{
printf("请输入要修改学生信息的学号: ");
scanf("%d",&num);
if(modify_student_info(num))
printf("成功修改该学号对应的学生信息.\n");
else
printf("修改失败.\n");
}
break;
case :
if(student_list_empty())
printf("学生信息表为空,请先添加学生信息.\n");
else
display_average();
break;
case :
if(student_list_empty())
printf("学生信息表为空,请先添加学生信息.\n");
else
if(save_file())
printf("保存学生信息成功.\n");
else
printf("保存学生信息失败.\n");
break;
case :
printf("欢迎下次使用,再见.\n");
system("pause");
exit();
break;
default:
printf("输入错误,请重新选择操作.\n");
}
}
system("pause");
return ;
} void menu()
{
printf("1.查看学生信息.\n");
printf("2.添加学生信息.\n");
printf("3.删除学生信息.\n");
printf("4.修改学生信息.\n");
printf("5.输出平均成绩.\n");
printf("6.保存学生信息.\n");
printf("0.退出系统操作.\n");
}

程序执行结果如下所示:

(1)第一次执行没有学生信息,读取文件失败。

(2)以后执行先从文件中读取学生信息,然后进行操作。

【转载】C语言综合实验1—学生信息管理系统的更多相关文章

  1. C语言小练习之学生信息管理系统

    C语言小练习之学生信息管理系统 main.c文件   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

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

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  3. C语言练习-学生信息管理系统

    题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...

  4. 学生信息管理系统(c语言)

    ①注意: 程序中使用了sleep()函数.system()函数 关于 sleep() 函数 sleep() 函数的头文件和用法会因环境的不同而有所不同. 具体见-sleep()函数功能及用法 关于sy ...

  5. 大一C语言结课设计之《学生信息管理系统》

    第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...

  6. 学生信息管理系统(C语言)

    #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student ...

  7. 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)

    上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...

  8. [项目记录] 用c语言完成的一个学生成绩管理系统

    一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...

  9. 【Python3.6+Django2.0+Xadmin2.0系列教程之三(入门篇-下)】学生信息管理系统

    上一篇我们已经初步的构建起了一个学生管理系统的模型,现在接着来继续完善它吧. 1.上传图片/文件等资源 有时候需要添加一些附件,例如,新生刚入学,大家相互之间还不熟悉,希望能通过照片来加深印象,并且方 ...

随机推荐

  1. idel 中 生成 jar包 和项目中自己需要的包

    一.首先在自己的项目中创建一个类类中创建一个构造方法构造方法中传入一个字符串参数(这个字符串参数是为了传入路径) 在方法体内通过file类创建文件夹(换而言之就是项目中的包) 二 .就是对这个项目中的 ...

  2. Mirantis对OpenStack的性能测试:高并发创建75000台虚拟机

    硅谷创业公司Mirantis不久前进行了一项基准测试,测试在OpenStack Havana版本上创建75000台虚拟机的性能数据.就启动时间和成功率而言,当应用250个并发部署75000台虚拟机是最 ...

  3. wiredtiger引擎性能——比levelDB更牛叉!

    WE'VE JOINED MONGODB!   We're proud to announce that MongoDB has acquired WiredTiger, and we've join ...

  4. js修改隔行tr的颜色。

    <!DOCTYPE html><html lang="zh-Hans"><head> <meta charset="UTF-8& ...

  5. BitmapUtil(高效压缩不失真)

    package com.changim.patient.app.utils; import android.app.Activity; import android.content.ContentRe ...

  6. Spring_总结_03_装配Bean(一)_自动装配

    一.前言 本文承接上一节:Spring_总结_02_依赖注入 在上一节我们了解到依赖注入的实质就是装配. 这一节我们来学习下装配Bean的相关知识. 二.Bean的装配机制 1.三种装配机制 Spri ...

  7. APP登录的机制

    1.APP每次发送请求时,都会发送header给服务器,服务器去校验传过来的信息是否正确:校验成功后登录成功,若传入的信息不符合该用户的信息则服务器判断,传给APP登录失败 每次的请求都会传入上图中的 ...

  8. svn代码回滚命令 svn up -r

    第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R] something 其中so ...

  9. PageRank算法原理及实现

    PageRank算法原理介绍 PageRank算法是google的网页排序算法,在<The Top Ten Algorithms in Data Mining>一书中第6章有介绍.大致原理 ...

  10. 排序算法 java实现2

    继续排序算法 4.冒泡排序 从第一个开始,跟后面一个数比较,如果比后面大就交换位置,这样没完成一轮,就可以把最大的选出来 public static <T extends Comparable& ...