学生信息管理系统最简单源代码。

求一个c语言编写的简单点的学生信息管理系统。
2024-12-03 16:46:47
推荐回答(3个)
回答1:

方法一:

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流逐行读取存有学生信息的文本文件,对每行字符串,采用\t分割后得到一个字符串数组,数据各项即为一个学生的具体信息。然后新建一个节点加入到链表。

6、运行结果:

回答2:

#include
#include

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 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 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 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 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 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 if(num==stu[i].num)
j=i;
if(j!=(n-1))
{
for(e=i-1;e {
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("提示:无学生数据,请输入数据!");
}

回答3:

  • 一.需求分析

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

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

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

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

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

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

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

  • 二.概要设计

  • 流程图

  • 添加信息

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

  • 显示信息

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

  • 查询信息

  • 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,身份证号查询\n按2,姓名查询:\n");

    获取用户的选择

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

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

  • struct IdCard *pid;

    pid=head;

    while(pid){

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

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

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

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

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

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

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

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

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

    printf("---------------------------------------------------------------------------------\n");

    }

    pid=pid->next;

    }

  • 效果图如下:

  • 修改信息

  • 获取用户的选择

  • ystem("cls");

    char name[20];

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

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

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

    fflush(stdin);

  • 选择相应的修改方式

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

  • struct IdCard *pid,*ptmp;

    pid=head;

    while(pid){

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

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

    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("打开待写入的文件失败!\n");  

    return;  

    }  

    while(pid)  

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

    i++;  

    pid = pid->next;  

    }  

    fclose(pf); 

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

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

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

  • 效果图如下:

  • 从文件中读取信息

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

  • FILE *pf;  

    struct IdCard *pid;  

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

    {  

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

    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条。\n",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("\n");

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

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

  • 在相应的变量上加减

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

  • 效果图如下:

  • 四.测试结果

  • 程序开始运行

  • 回车键后显示菜单

  • 添加信息

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

  • 查询信息

  • 删除一个信息

  • 删除所有信息

  • 修改信息

  • 保存信息至文件

  • 从文件中读取信息

  • 显示所有信息

  • 数据分析

  • 五.用户使用说明

  • 信息添加:

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

  • 保存信息至文件

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

  • 从文件中读取信息

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

  • 查询信息

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

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

  • 修改信息

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

  • 删除所有信息

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

  • 删除一个信息

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

  • 数据分析

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

  • 退出程序

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

Hu118391  徊 c语言课程设计

希望我的回答,你能喜欢