学生信息管理系统最简单源代码。 求个C++编写的简单学生信息管理系统 带报告书和源代码!谢谢...

作者&投稿:俎榕 (若有异议请与网页底部的电邮联系)

方法一:

1、创建一个c语言项目。然后右键头文件,创建一个Stu的头文件。

2、然后编写头文件的代码。再将数据结构的增删改查和结构体写入头文件。

3、然后在源文件中创建main源文件和Stu源文件。再main文件中写入intmian()代码。

4、然后在mian主函数中,写入while语句无限循环。再写入Init函数。

5、在Stu源文件的Init函数用printf语句,将学生管理系统输出。再创建链表的头节点head。

6、然后用switch函数对操作进行判断。再执行数据结构的增删改查功能。这样一个学生管理系统的基本框架就完成了。

方法二:

1、新建一个学生实体类,用于存放学生的各项信息。

2、新建一个链表节点类,每个节点存放一个学生信息及下一个节点的引用。

3、添加一个主操作类,并添加本系统的菜单方法。

4、定义链表的头节点,当前最后一个节点,以及主控制逻辑信息。

5、使用io流逐行读取存有学生信息的文本文件,对每行字符串,采用分割后得到一个字符串数组,数据各项即为一个学生的具体信息。然后新建一个节点加入到链表。

6、运行结果:



#include <stdio.h>
#include <string.h>

struct student
{
long int num;
char name[20];
int age;
char sex[4];
char b[30];
char p[15];
};
int n=0;
struct student stu[100];
struct student *p;

void lr();
void ll();
void cx();
void xg();
void sc();

void main()
{
int z;
printf("+---------------------------+\n");
printf("| 欢迎使用学生信息管理系统 |\n");
printf("+---------------------------+\n");
printf("提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf("\n\t\t\t--------------------------------\n");
printf("\t\t\t+ 主菜单 |\n");
printf("\t\t\t--------------------------------\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+ [0]----退出系统 |\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您的选择:");
scanf("%d", &z);
switch(z)
{
case 0 : break;
case 1 :lr();break;
case 2 :ll();break;
case 3 :cx();break;
case 4 :sc();break;
case 5 :xg();break;
default:printf("\n无效选项!");
}
}
while(z!= 0);
}

void lr()/*录入函数*/
{
int y;
if(n==0)
p=stu;
do
{
printf("--------------------\n");
printf("请输入学生的学号:");
scanf("%ld",&p->num);
printf("请输入学生的姓名:");
scanf("%s",p->name);
printf("请输入学生的年龄:");
scanf("%d",&p->age);
printf("请输入学生的性别:");
scanf("%s",p->sex);
printf("请输入学生的地址:");
scanf("%s",p->b);
printf("请输入学生的电话:");
scanf("%s",p->p);
n++;
p++;
printf("\n1.继续输入.\n0.输入完毕.\n");
printf("请选择:");
scanf("%d",&y);
}
while(y==1);
printf("提示:输入完毕!你一共输入%d个\n",n);

}

void ll()/*浏览函数*/
{
int i,j;
if(n!=0)
{ printf("学生总数:%d\n", n);
printf("学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("-----------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
}
else printf("提示:无学生数据,请输入数据!");
}

void cx()/*查询函数*/
{
int c;
int w,i,j=0;
char name[20];
if(n!=0)
{
do{ printf("\n");
printf("+--------------------+\n");
printf("| 按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入您的选择:");
scanf("%d", &c);
switch(c)
{
case 0:break;
case 1:
printf("请输入学生的学号;");
scanf("%ld", &w);
printf("\n");
for(i=0;i<n;i++)
if(stu[i].num==w)
{
printf("\n学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
j=1;
}
if(j==0)
printf("提示:没有该学生记录,请核对!");
break;
case 2:
printf("请输入学生的姓名:");
scanf("%s", name);
printf("\n");
for(i=0;i<n;i++)
if(strcmp(name,stu[i].name)==0)
{
printf("\n学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
j=1;
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
}
if(j==0)
printf("提示:没有该学生记录,请核对!");
break;
default:
printf("\n提示:无效选项!");
break;
}

}while(c!= 0);
}else printf("提示:无学生数据,请输入数据!");
return;
}

void xg()/*修改函数*/
{
long int num;
int i,j,c;
if(n!=0)
{
printf("请输入您要修改的学生的学号:");
scanf("%ld", &num);
printf("\n");
for(i=0;i<n;i++)
if(stu[i].num==num)
j=i;
do{
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 年龄 请按 2 |\n");
printf("| 性别 请按 3 |\n");
printf("| 学号 请按 4 |\n");
printf("| 地址 请按 5 |\n");
printf("| 电话 请按 6 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:");
scanf("%d", &c);
printf("\n");
switch(c)
{
case 0:break;

case 1:printf("请输入新姓名:");
scanf("%s",stu[j].name);
break;
case 2:printf("请输入新年龄:");
scanf("%d",&stu[j].age);
break;
case 3:printf("请输入新性别:");
scanf("%s",stu[j].sex);
break;
case 4:printf("请输入新学号:");
scanf("%ld",&stu[j].num);
break;
case 5:printf("请输入新地址:");
scanf("%s",stu[j].b);
break;
case 6:printf("请输入新电话:");
scanf("%s",stu[j].p);
break;
default:
printf("\n无效选项!");
break;
}

}while(c!= 0);
}else printf("提示:无学生数据,请输入数据!");
}

void sc()/*删除函数*/
{
long int num;
int i,j,e;
if(n!=0)
{
printf("学号\t姓名\t年龄\t性别\t地址\t\t电话\n");
printf("-----------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%ld\t%s\t%d\t%s\t%s\t\t%s\n",stu[i].num,stu[i].name,stu[i].age,stu[i].sex,stu[i].b,stu[i].p);
printf("请输入您要删除的学生的学号:");
scanf("%ld", &num);
printf("\n");
for(i=0;i<n;i++)
if(num==stu[i].num)
j=i;
if(j!=(n-1))
{
for(e=i-1;e<n;e++,j++)
{
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].sex,stu[j+1].sex);
stu[j].age=stu[j+1].age;
strcpy(stu[j].b,stu[j+1].b);
strcpy(stu[j].p,stu[j+1].p);
n--;p--;
}
}else {n--;p--;}
printf("提示:删除完毕!");
}else printf("提示:无学生数据,请输入数据!");
}

  • 一.需求分析

  • 用动态链表储管理姓名、电话、住址、身份证等信息和具备添加、删除等编辑功能

  • 可以通过身份证号码识别性别,省份,年龄

  • 可以统计总人数,男生人数,女生人数,同一年龄段人数

  • 可以通过姓名,身份证号查询与修改数据

  • 具备较美观的界面与汉字提示

  • 具备保存信息至文件,及从文件中读取信息的功能

  • 用动态链表来储存数据,便于管理

  • 二.概要设计

  • 流程图

  • 添加信息

  • 声明一个结构体来储存数据,并通过声明指针来动态添加信息

  • 显示信息

  • 声明一个结构体指针,让指针等于头指针,并遍历所有节点,打印每个节点的信息

  • 查询信息

  • 1.获取用户的选择确定 用姓名查找或是身份证号查找

    2.遍历所有节点,找到与用户输入相和的节点

    3.打印该节点的信息

  • 修改信息

  • 1.获取用户的选择确定 用姓名查找或是用身份证号查找并修改

    2.遍历所有节点,找到与用户输入相和的节点

    3.开始修改该节点的姓名,身份证号,手机号

  • 删除信息

  • 1.获取用户的选择确定 用姓名查找并删除或是用身份证号查找并删除,及全部删除

    2.遍历所有节点,找到与用户输入相和的节点的上一个节点的地址

    3.将这个节点的next储存为下下个节点的地址

    4.删除中间的节点

  • 数据分析

  • 1.遍历所有节点

    2.依次辨别性别,年龄段

    3.在储存总人数,男生人数,女生人数,年龄段的数据上添加人数

  • 保存信息至文件

  • 1.遍历每个节点

    2.将每个节点的信息储存到文件中

    3.每储存一个count便加一

    4.打印储存数据的个数

  • 从文件中读取数据

  • 1.将文件中的数据依次添加到新的节点上

  • 退出程序

  • 将菜单的while(running)循环,running=0

  • 三.详细设计

  • 信息添加

  • struct IdCard

    {

    char num[20];

    char phone[11];

    int sex;

    char city[20];

    char name[20];

    long age;

    struct IdCard *next;

    };

    struct IdCard *head=NULL;//声明一个头节点作为全局变量,且使他为空

  • 动态生成节点,并往节点中添加信息,生成动态链表

  • while(strcmp(pid1->num,str)!=0){

    n++;

    if(n==1) head=pid1;

    else pid2->next=pid1;

    pid2=pid1;

    pid1=(struct IdCard*)malloc(sizeof(struct IdCard));

    printf("请输入身份证号(按0退出):");

    char str[]="0";//用来辨别

    scanf("%s",pid1->num);

    if(strcmp(pid1->num,str)==0) break;

  • 在此处通过身份证号计算相应的年龄,性别,将这些信息添加到该节点上。

  • 效果图如下

  • 菜单样式

  • 通过printf打印选项

  • 在while中循环,使菜单一直刷新存在

  • 在while中的最后加system(“pause”)使每个键盘信息能被显示出来

  • 效果图如下:

  • 显示信息

  • struct IdCard *pid;//遍历节点

  • pid=head;

    通过遍历节点打印出所有节点的信息

  • 效果图如下:

  • 查询信息

  • int num;

  • printf("按1,身份证号查询
    按2,姓名查询:
    ");

    获取用户的选择

  • 声明字符串变量来储存用户输入的姓名或身份证号

  • 遍历所有节点,找到与用户相符合的那个节点,并打印

  • struct IdCard *pid;

    pid=head;

    while(pid){

    if(strcmp(pid->num,num)==0){

    printf("------------------------------显示所有信息---------------------------------------
    "); 

    printf("身份证号            姓名          性别          省份          手机号      年龄
    ");

    printf("%18s ",pid->num);

    printf("%-16s",pid->name);

    printf("%-13s",pid->sex==1?"男":"女");

    printf("%-14s",pid->city);

    printf("%11s",pid->phone);

    printf("  %d
    ",pid->age);

    printf("---------------------------------------------------------------------------------
    ");

    }

    pid=pid->next;

    }

  • 效果图如下:

  • 修改信息

  • 获取用户的选择

  • ystem("cls");

    char name[20];

    printf("请输入要修改的名字(20个字节):
    ");

    while(1!=scanf("%s",name)){

    printf("你的输入有误,请重新输入(20个字节):");

    fflush(stdin);

  • 选择相应的修改方式

  • 遍历节点选到与用户输入相符的节点,并修改

  • struct IdCard *pid,*ptmp;

    pid=head;

    while(pid){

    if(strcmp(pid->name,name)==0){

    printf("请输入你要重写的身份证号:
    ");

    while(1!=scanf("%s",pid->num)||strlen(pid->num)!=18){

    printf("你的输入有误,请重新输入(18位):");

    fflush(stdin);

    }

  • 效果图如下:

  • 保存信息至文件

  • 以只写的二进制方式打开一个文件

  • FILE *pf = fopen("FILENAME", "wb");

  • 遍历节点

  • struct IdCard *pid = head;  

    if(!pf)  

    {        

    printf("打开待写入的文件失败!
    ");  

    return;  

    }  

    while(pid)  

    fwrite(pid, 1, sizeof(struct IdCard), pf);//把每位学生信息写入文件  

    i++;  

    pid = pid->next;  

    }  

    fclose(pf); 

    printf("成功写入%d信息",i);  

  • 将每个节点写入文件中,用frwite函数

  • 声明一个变量来计算写入的信息数

  • 效果图如下:

  • 从文件中读取信息

  • 以只读的二进制方式打开文件夹

  • FILE *pf;  

    struct IdCard *pid;  

    if((pf = fopen("FILENAME", "rb")) == NULL)  

    {  

    printf("文件还没有创建,请手工输入学生信息并保存吧!
    ");  

    return;  

    }  

  • 申请新的空间将地址赋给节点

  • struct IdCard *pid1,*pid2;

    pid1=pid2=(struct IdCard*)malloc(sizeof(struct IdCard));

    fread(pid1,1,sizeof(struct IdCard),pf);

    while(!feof(pf)){

    i++;

    if(head==NULL){

    head=pid1;

    }else{

    pid2->next=pid1;

    }

    pid2=pid1;

    pid1 = (struct IdCard*)malloc(sizeof(struct IdCard));

    fread(pid1,1, sizeof(struct IdCard), pf);  

    fclose(pf);  

    printf("文件读取完毕!新增学生信息%d条。
    ",i);

  • 将文件信息写入节点中

  • 将节点添加进动态链表中

  • 声明一个变量来记录读出信息数量

  • 效果图如下:

  • 数据分析

  • 遍历每个节点

  • int ManCount=0,

    WomanCount=0,

    age1Count=0,

    age2Count=0,

    count=0;

    struct IdCard *pi;

    pi=head;

    while(pi){

    count++;

    if(pi->sex==1){

    ManCount++;

    }else{

    WomanCount++;

    }

    if(pi->age>10&&pi->age<20)

    age1Count++;

    if(pi->age>20&&pi->age<40)

    age2Count++;

    pi=pi->next;

    }

    printf("
    ");

    printf("总共有%d个身份证
    男的占%d个
    女的占%d个
    年龄段在10到20岁之间的有%d个
    年龄段在20到40岁之间的有%d个
    ",count,ManCount,WomanCount,age1Count,age2Count);

  • 辨别每个节点的性别,年龄段

  • 在相应的变量上加减

  • 于是统计出了总信息数量,男生数量,女生数量,各年龄段数量

  • 效果图如下:

  • 四.测试结果

  • 程序开始运行

  • 回车键后显示菜单

  • 添加信息

  • 当身份证号输入的位数不够18位时,会报错,当手机号不够11位时,会报错重新输入

  • 查询信息

  • 删除一个信息

  • 删除所有信息

  • 修改信息

  • 保存信息至文件

  • 从文件中读取信息

  • 显示所有信息

  • 数据分析

  • 五.用户使用说明

  • 信息添加:

  • 可以输入相应的身证号,名字与手机号。当身份证号与手机号的位数输入错误时,会有相应的提示,此时你可以重新输入。在输入信息结束时,可以按0

  • 保存信息至文件

  • 如果想要在下一次打开此程序时,还能看到相应的信息,一定要记得保存信息至文件,但此次保存文件会覆盖上一次的信息

  • 从文件中读取信息

  • 从文件中读取的信息会添加到你新写的信息后面,当显示所有信息时,会以链表形式逐个打印出来

  • 查询信息

  • 当你输入的信息查找不到时,此时不会打印任何信息,可按任意键回到菜单。

    同样输入手机号和身份证号会检查你的位数对不对,不对的话,将提示你重新输入

  • 修改信息

  • 当你输入相应的身份证号或名字时,会让你把这个人的信息全部输入一次

  • 删除所有信息

  • 该选项将会删除你所有的信息,谨慎!

  • 删除一个信息

  • 可以选择你想删除的身份证号或名字,删除掉其中一个信息,不会影响其他信息

  • 数据分析

  • 会统计出总信息数量,男生数量,女生数量,各年龄段数量

  • 退出程序

  • 按0会退出程序,此次使用身份证信息管理系统结束

Hu118391  徊 c语言课程设计

希望我的回答,你能喜欢



c语言的学生信息管理系统,是大一学生, 水平不高,要最简单的源代码。包含输入学生的基本信息,可增加~

不用指针用什么?
指针没你想象的那么可怕,事实上指针非常好用
这个就需要使用链表来做了
使用结构体做节点
而删除的话我建议使用双向链表会更简单点

如果代码不想自己写的话
我可有偿代劳

同学你太天真了,20分就想叫人帮你做个相当浪费时间的东西,还要带报告书!这种事情是不可发生的,死了那条心吧,自己安分做吧!想当年我也是自己慢慢做的呢!

如何用c语言制作一个学生信息管理系统,要求以文件形式保存
答:printf("欢迎进入信息管理版块!\n\n");printf("\025 1、添加学生\n");printf("\025 2、删除学生\n");printf("\025 3、修改学生信息\n");printf("\025 4、返回\n");printf("请输入您的选择编号:\n");scanf("%d",&j);getchar();if ( 1 == j) head = AddStu(head);else...

急求java学生信息管理系统源代码,带有连接数据库的,万分感谢
答:new CardLayout();pframe = new JPanel(clayout);add(pframe);JPanel mainp = new JPanel(new BorderLayout());JLabel mainl = new JLabel("学生信息管理平台",SwingConstants.CENTER);mainl.setFont(new Font("serif",Font.BOLD,30));mainp.add(mainl);pframe.add(mainp,"main");...

c语言学生管理系统,请把每行代码解释清楚,谢谢了
答:2014-05-22 c语言学生信息管理系统代码 409 2014-09-02 C语言新手,求解释每行代码的意思,谢谢了,在线等 2 2019-12-31 求一个学生成绩管理系统的代码 c语言的,谢谢大佬? 2013-06-16 用C语言编写一个学生管理系统。 199 2010-08-27 【急】求C语言学生成绩管理系统源代码,要能用的 34 更多类似问题...

求用MFC做一个学生信息管理系统,能实现基本的功能,要求附带源代码!谢 ...
答:struct Student { char Name[10];int Age;char Sex;char Tel[13];};struct Student st[100];int Num=0;fstream ftxl;int fNum=0;void InStu(){ int n,i,be;be=Num;cout<<"n=";cin>>n;for(i=be;i<be+n;i++){ cout<<"请输入第"<<i+1<<"个学生的信息"<<endl;cout<<"...

求一个C语言学生管理系统源代码
答:求一个C语言学生管理系统源代码  我来答 首页 在问 全部问题 娱乐休闲 游戏 旅游 教育培训 金融财经 医疗健康 科技 家电数码 政策法规 文化历史 时尚美容 情感心理 汽车 生活 职业 母婴 三农 互联网 生产制造 其他 用户 认证用户 视频作者 知道团队 认证团队 合伙...

Java实现学生简易信息管理系统
答:import java.util.*;import java.io.*;class StuMgr{public static class Student{public int id;public String name;public int age;public Student(int id ,String name,int age){this.id = id;this.name = name;this.age = age;}@Overridepublic String toString(){return id + "," + ...

学生宿舍管理系统c程序源代码
答:学生宿舍管理系统c程序源代码 20 (1)功能要求:实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等。基本要求:1设计简单的菜单,能够进行系统功能选择。2实现信息的录... (1)功能要求:实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳...

学生信息管理系统(C语言版)
答:用C/C++编写的学生信息管理系统,最好有课程设计的论文,如果没有的话只有做好的系统也可以,代码要求50%以上注释!最好是把整套完整系统的下载地址告诉我。万分感谢!!如果可以用的... 用C/C++编写的学生信息管理系统,最好有课程设计的论文,如果没有的话只有做好的系统也可以,代码要求50%以上注释!最好是把整套...

用C语言设计一个学生成绩管理系统
答:include <stdio.h>#include <string.h> include <stdlib.h>#define MAX 1000/*定义学生成绩信息结构*/struct stu{ char id[8];char name[8];

求一份学生信息管理的java源文件,要求可以增加,修改,删除,查询等功能...
答:/*学生信息管理系统,实现学生信息: *增加 int[] a=new int[9] *删除 *查找 *更改 *File文件存储数据 */import java.util.Scanner;import java.lang.*;import java.io.*;class Student {private static Student[] s = new Student[2];int n = 0;private String name;private int...