学生信息管理系统(c语言)
①注意:
程序中使用了sleep()函数、system()函数
关于
sleep()函数
sleep()函数的头文件和用法会因环境的不同而有所不同。
具体见-sleep()函数功能及用法关于
system()清屏函数
- linux下的清屏函数是
system("clear") - Windows下的清屏函数是
system("cls") clrscr()是Turbo C中的库函数,包含在#include <conio.h>中。
在VC中无法调用此函数
下面贴出的代码中使用的是 sleep(1) 和 system("clear")
至于为什么不是 sleep(1000)和system("cls")
请仔细把上方的注意再看一遍~~~
②完整代码:
/*title: 学生信息管理系统(c/c++)
*author: Griouges
*转载请注明出处:http://www.cnblogs.com/Griouges/
*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define M 50
typedef struct
{ //定义学生信息结构体
char no[20]; //学号
char name[20]; //姓名
char sex[5]; //性别
int age; //年龄
} students;
void return_ment(); //返回主菜单
void print_ment(); //打印主菜单
int ment_select(); //主菜单选择
int enter(students t[]); //输入学生信息
void list(students t[], int n); //显示学生信息
void search_name(students t[], int n); //按姓名查找显示学生信息
void search_no(students t[], int n); //按序号查找显示学生信息
void change_no(students t[], int n); //按学号修改学生信息
int del(students t[], int n); //删除学生信息
int add(students t[], int n); //插入学生信息
int load(students t[]); //从文件中读取学生信息
void print(students temp); //显示单条学生信息
void save(students t[], int n); //保存学生信息为文件
int find_name(students t[], int n, char *s); //按姓名查找
int find_no(students t[], int n, char *s); //按学号查找
/*
*
*/
void return_ment()
{
char mistake[20];
printf("按回车键返回主菜单...\n");
gets(mistake);
return;
}
void print_ment()
{
printf("********************主菜单********************\n");
printf(" 0. 录入学生信息\n");
printf(" 1. 浏览学生信息\n");
printf(" 2. 按姓名查找\n");
printf(" 3. 按学号查找\n");
printf(" 4. 按学号删除\n");
printf(" 5. 按学号修改\n");
printf(" 6. 插入一组学生信息\n");
printf(" 7. 保存学生信息到文件\n");
printf(" 8. 加载文件到内存\n");
printf(" 9. 退出\n");
printf("********************************************\n");
return;
}
int ment_select()
{
print_ment();
printf("\n输入您的菜单选项编号(0-11):");
int c;
while (1)
{
scanf("%d", &c);
getchar();
if (c > 11 || c < 0)
{
system("clear");
print_ment();
printf("\n输入的选项编号无效,请重新输入:");
continue;
}
else
break;
}
return c;
}
//输入学生信息,形参为结构体数组,函数值返回类型为整型表示信息长度
int enter(students t[])
{
int i, n;
system("clear");
printf("\n请输入需要记录学生的条数\n");
scanf("%d", &n);
system("clear");
printf("请输入%d位学生的信息:\n", n);
printf("学号 姓名 性别 年龄\n");
printf("--------------------------------------------\n");
for (i = 0; i < n; i++)
{
scanf("%s", t[i].no);
scanf("%s", t[i].name);
scanf("%s", t[i].sex);
scanf("%d", &t[i].age);
getchar();
}
printf("信息录入中...\n");
sleep(1);
if (i == n)
printf("信息录入成功!\n");
else
printf("信息录入失败!\n");
return n;
}
//显示信息,形参为结构体数组和信息条数
void list(students t[], int n)
{
int i;
system("clear");
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
return;
}
printf("\n*******************学生清单******************\n");
printf("学号 姓名 性别 年龄\n");
printf("---------------------------------------------\n");
for (i = 0; i < n; i++)
{
printf("%-14s%-14s%-14s%-14d\n", t[i].no, t[i].name, t[i].sex, t[i].age);
if ((i + 1) % 10 == 0 /*&&n%10>0*/)
{
printf("---------------------------------------------\n");
printf("每页显示10位学生的信息,按回车向后翻页...\n");
getchar();
system("clear");
printf("\n*******************学生清单*******************\n");
printf("学号 姓名 性别 年龄\n");
printf("---------------------------------------------\n");
}
}
printf("---------------------------------------------\n");
}
void search_name(students t[], int n)
{
char s[20];
int i;
system("clear");
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
return;
}
printf("请输入查找的学生的名字:\n");
scanf("%s", s);
getchar();
i = find_name(t, n, s);
if (i > n - 1)
printf("没有姓名为%s的学生!\n", s);
else
print(t[i]);
}
void search_no(students t[], int n)
{
system("clear");
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
return;
}
int no;
printf("请输入查找信息学生的学号:\n");
scanf("%d", &no);
getchar();
if (no >= 0 && no < n)
{
print(t[no]);
printf("\r\n");
}
else
printf("学号为%d的学生不存在!\n", no);
}
void change_no(students t[], int n)
{
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
return;
}
system("clear");
char no[20];
int i;
printf("请输入要修改的学生信息的学号:\n");
scanf("%s", no);
i = find_no(t, n, no);
if (i == n)
printf("没有找到学号为%s的学生!\n", no);
else
{
printf("学号为%s的学生信息修改前为:\n", no);
print(t[i]);
printf("\n\n");
printf("请输入修改后的信息:\n");
printf("学号 姓名 性别 年龄\n");
printf("---------------------------------------------\n");
scanf("%s", t[i].no);
scanf("%s", t[i].name);
scanf("%s", t[i].sex);
scanf("%d", &t[i].age);
getchar();
}
system("clear");
printf("正在修改学号为%s的学生信息...\n", no);
sleep(1);
system("clear");
printf("*****修改成功*****\n");
printf("修改后的信息为:\n");
print(t[i]);
}
int del(students t[], int n)
{
char s[20];
int ch = 0;
int i;
system("clear");
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存\n");
return n;
}
printf("请输入要删除的学生姓名:\n");
scanf("%s", s);
getchar();
i = find_name(t, n, s);
if (i == n)
printf("没有找到名字为%s的学生!\n", s);
else
{
printf("正在删除...\n");
for (; i < n; i++)
{
strcpy(t[i].name, t[i + 1].name);
strcpy(t[i].no, t[i + 1].no);
strcpy(t[i].sex, t[i + 1].sex);
t[i].age = t[i + 1].age;
}
n--;
printf("删除成功!\n");
}
return n;
}
int add(students t[], int n)
{
system("clear");
if (n == 0)
{
printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
return n;
}
students temp;
int i, j;
char s[20];
printf("请输入要插入的学生信息:\n");
printf("学号 姓名 性别 年龄\n");
printf("--------------------------------------------\n");
scanf("%s%s%s%d", temp.no, temp.name, temp.sex, &temp.age);
getchar();
printf("--------------------------------------------\n");
if (n > 0)
{
printf("请输入插入位置的姓名,将新信息插入在该学生前面:\n");
scanf("%s", s);
getchar();
i = find_name(t, n, s);
}
else
i = 0;
for (j = n - 1; j >= i; j--)
{
strcpy(t[i + 1].no, t[i].no);
strcpy(t[i + 1].name, t[i].name);
strcpy(t[i + 1].sex, t[i].sex);
t[i + 1].age = t[i].age;
}
strcpy(t[i].no, temp.no);
strcpy(t[i].name, temp.name);
strcpy(t[i].sex, temp.sex);
t[i].age = temp.age;
n++;
printf("信息插入成功!\n");
return n;
}
void save(students t[], int n)
{
system("clear");
int i;
FILE *fp;
if ((fp = fopen("record.txt", "wb")) == NULL)
{
printf("无法打开学生信息文件!\n");
exit(1);
}
printf("\n正在保存...\n");
fprintf(fp, "%d", n);
fprintf(fp, "\r\n");
for (i = 0; i < n; i++)
{
fprintf(fp, "%-14s%-14s%-14s%-14d", t[i].no, t[i].name, t[i].sex, t[i].age);
fprintf(fp, "\r\n");
}
fclose(fp);
sleep(1);
system("clear");
printf("*****保存成功*****\n");
}
int load(students t[])
{
int i, n;
FILE *fp;
if ((fp = fopen("record.txt", "rb")) = NULL)
{
printf("无法打开学生信息文件!\n");
exit(1);
}
fscanf(fp, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fp, "%14s%14s%14s%14d", t[i].no, t[i].name, t[i].sex, &t[i].age);
fclose(fp);
printf("成功加载学生信息到内存中!\n");
return n;
}
//显示指定的一组数据
void print(students temp)
{
printf("\n*******************学生清单*******************\n");
printf("学号 姓名 性别 年龄\n");
printf("---------------------------------------------\n");
printf("%-14s%-14s%-14s%-14d", temp.no, temp.name, temp.sex, temp.age);
// printf("---------------------------------------------\n");
}
int find_name(students t[], int n, char *s)
{
int i;
for (i = 0; i < n; i++)
if (strcmp(s, t[i].name) == 0)
return i;
return i;
}
int find_no(students t[], int n, char *s)
{
int i;
for (i = 0; i < n; i++)
if (strcmp(s, t[i].no) == 0)
return i;
return i;
}
//主函数
int main()
{
students stu[M]; //定义结构体数组
int length = 0; //保存信息条数
for (;;)
{
system("clear");
switch (ment_select())
{
case 0:
length = enter(stu);
break;
case 1:
list(stu, length);
break;
case 2:
search_name(stu, length);
break;
case 3:
search_no(stu, length);
break;
case 4:
length = del(stu, length);
break;
case 5:
change_no(stu, length);
break;
case 6:
length = add(stu, length);
break;
case 7:
save(stu, length);
break;
case 8:
length = load(stu);
break;
case 9:
exit(0);
break;
}
return_ment();
}
return 0;
}
代码中有任何问题欢迎大家指正,以便及时修改哦!
学生信息管理系统(c语言)的更多相关文章
- C语言练习-学生信息管理系统
题目要求: 学生信息管理系统struct studentInfo{ int id; char name[128]; int age; char sex; int c_score; int cpp_sc ...
- 【转载】C语言综合实验1—学生信息管理系统
http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...
- 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 ...
- 大一C语言结课设计之《学生信息管理系统》
第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...
- 学生信息管理系统(C语言)
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct student ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
- 【Python3.6+Django2.0+Xadmin2.0系列教程之二】学生信息管理系统(入门篇)
上一篇我们已经创建好了一个Xadmin的基础项目,现在我们将在此基础上构建一个同样很基础的学生信息管理系统. 一.创建模型 模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段, ...
- 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...
- 基于数据库MySQL的简易学生信息管理系统
通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统. 一:基本要求 1.通过已知用户名和密码进行登录: 2.可以显示菜单: 3.可以随时插入学生 ...
随机推荐
- auto和bool
一.auto' 1.只要在函数内部定义变量,默认是auto int num 等价于 auto int num = 10; 2.C语言中的auto关键字就是自动分配自动释放 二.bool类型 1.头文 ...
- PHP定义字符串的四种方式
1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...
- FBReader阅读引擎支持的功能
"三十年河东,三十年河西"是一句民间谚语,它的来源是:从前黄河河道不固定,经常会改道(历史上无数次发生).某个地方原来在河的东面,若干年后,因黄河水流改道,这个地方会变为在河的西面 ...
- Tensorflow简单CNN实现
觉得有用的话,欢迎一起讨论相互学习~Follow Me 少说废话多写代码~ """转换图像数据格式时需要将它们的颜色空间变为灰度空间,将图像尺寸修改为同一尺寸,并将标签依 ...
- React入门教程
做前端的人都知道,目前热门前端的框架是 VAR => Vue,Anglur,React. 而如果说最热门的前端框架是谁,毫无悬念是 React React 是由 Facebook 主导开发的一个 ...
- Spring整合JMS(四)——事务管理
原文链接:http://haohaoxuexi.iteye.com/blog/1983532 Spring提供了一个JmsTransactionManager用于对JMS ConnectionFact ...
- SqlServer varchar数据中类似于1.1.1.1这种值的排序方法
select * from 表名order by Convert(int,left(列名,charindex('.',列名+'.')-1)) asc, 列名asc charindex('.',列名) ...
- 2018-01-08 学习随笔 SpirngBoot整合Mybatis进行主从数据库的动态切换,以及一些数据库层面和分布式事物的解决方案
先大概介绍一下主从数据库是什么?其实就是两个或N个数据库,一个或几个主负责写(当然也可以读),另一个或几个从只负责读.从数据库要记录主数据库的具体url以及BigLOG(二进制日志文件)的参数.原理就 ...
- log4cpp退出时内存泄露的修复方案
1.缘由 一直对log4cpp非常有好感,就在自己的项目中集成了log4cpp1.1.1版本,并围绕着它建立了一系列的封装函数方便外部调用.写完了一个测试代码后,忽然想看看自己写的程序有没有内存泄露问 ...
- python中常见的三种句型if,while,for
1.if语句: 特别说明:条件后面的冒号不能少,同样必须是英文字符. 特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格.python用这种方法替代了其他很多编程语言中的{}. num= ...