发布网友 发布时间:2022-04-19 23:06
共3个回答
热心网友 时间:2023-05-10 04:49
呵呵~~
我也找了很久哦~~
第一种:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student{
int id;
char name[10];
int age;
char sex[10];
char birthady[20];
int tel;
char nativeplace[50];
}st[50];
int i=0;
void shuru() {
char a;
do{
printf("\n请输入学号:");
scanf("%d",&st[i].id);
fflush(stdin);
printf("\n请输入姓名:");
gets(st[i].name);
printf("\n") ;
printf("请输入年龄:");
scanf("%d",&st[i].age);
fflush(stdin);
printf("\n请输入姓别:");
gets(st[i].sex);
fflush(stdin);
printf("\n请输入生日:");
gets(st[i].birthady);
printf("\n请输入电话:");
scanf("%d",&st[i].tel);
fflush(stdin);
printf("\n请输入籍贯:");
gets(st[i].nativeplace);
printf("\n是否继续输入另外一个学生信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void xianshi()
{
int j;
printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");
for(j=0;j<i;j++)
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace);
}
void paixu() //按年龄从大到小排序函数
{
int j,k;
int temp;
for(j=0;j<i;j++)
{
for(k=0;k<i-1-j;k++)
{
if(st[k].age<st[k+1].age)
{
temp=st[k].age;
st[k].age=st[k+1].age;
st[k+1].age=temp;
}
}
}
xianshi(); //排序后输出
}
void chazhao()
{
int m;
char name[20],b;
do
{
printf("\n请输入想查找的学生姓名:");
fflush(stdin);
gets(name);
for(m=0;m<i;m++)
{
if(strcmp(name,st[m].name)==0)
{
printf("\n\t您查找的学生在第%d个位置找到了!!!\n",m+1);
break;
}
}
if(m>=20)
printf("\n\t没有找到这个学生!!!\n");
else
{
printf("\t学号\t姓名\t年龄\t性别\t生日\t\t电话\t籍贯\n");
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace);
}
printf("\n是否查找另一个学生的信息?(y/n)");
fflush(stdin);
b=getchar();
}while(b=='y');
}
void shanchu()
{
char name[20],c;
int a,b;
do
{
printf("\n请输入要删除的学生姓名:\n");
fflush(stdin);
gets(name);
for(a=0;a<i;a++)
{
if(strcmp(name,st[a].name)==0)
break;
}
for(b=a;b<i;b++)
st[b]=st[b+1];
if(a>i)
printf("\t没有找到这个学生!!!\n");
else
{
i--;
xianshi();
}
printf("\n是否继续删除另一个学生信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}
void charu()
{
shuru();
paixu();
}
void main() //主函数
{
int change;
do{
system("cls");
printf("============================学生信息管理系统===================================\n");
printf("\t\t一: 输入学生信息\n");
printf("\t\t二: 显示学生信息\n");
printf("\t\t三: 查找学生信息\n");
printf("\t\t四: 删除学生信息\n");
printf("\t\t五: 插入学生信息\n");
printf("\t\t六: 退出程序\n");
fflush(stdin);
printf("\t\t请输入功能选项:");
scanf("%d",&change);
switch(change)
{
case 1:
shuru(); break;
case 2:
xianshi(); break;
case 3:
chazhao(); break;
case 4:
shanchu(); break;
case 5:
charu(); break;
case 6:
break;
}
getch();
}while(change!=6);
}
第二种
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[10];/*学生学号*/
char studentName[20];/*学生姓名*/
char studentSEX[10];/*学生性别*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
float mark4;/*第4门成绩*/
float mark5;/*第5门成绩*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用于接受用户的选择*/
/*主函数*/
void main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函数功能:从文件中读学生信息到链表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%s%f%f%f",p->studentNumber,p->studentSEX,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)
{
STUDENT *p;
printf("-------请选择相应功能------------\n\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("| 10 排序结果并输出成绩 |\n");
printf("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:
OutputInformation();/*显示所有学生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6:
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7:
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8:
SaveLinkToFile();/*保存数据*/
break;
case 9:
DesplayMarkSegment();/*显示各分数段的学生成绩*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*递归调用*/
}
/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/************************************
函数功能:申请一个新结点,并将其初始化
************************************/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<10;i++)
p->studentSEX[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->mark4=0.0;
p->mark5=0.0;
p->next=NULL;
return p;
}
/************************************
函数功能:取得用户输入的学生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:\n");
scanf("%s",t->studentName);
printf("请输入学生性别:\n");
scanf("%s",t->studentSEX);
printf("请输入该生所在班级:\n");
scanf("%s",t->className);
printf("请输入第1门成绩:\n");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:\n");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:\n");
scanf("%f",&(t->mark3));
printf("请输入第4门成绩:\n");
scanf("%f",&(t->mark4));
printf("请输入第5门成绩:\n");
scanf("%f",&(t->mark5));
}
/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/************************************
函数功能:根据用户输入的学生姓名显示该学生的信息
************************************/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据用户输入的学号显示该学生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->studentSEX);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark4);
printf("%.2f\t",t->mark5);
printf("%.2f\t",t->mark1+t->mark2+t->mark3+t->mark4+t->mark5);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3+t->mark4+t->mark5)/5);
}
/************************************
函数功能:根据用户输入的学号删除该学生
************************************/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该学号的学生\n");
return;
}
printf("成功删除\n");
}
/************************************
函数功能:显示所有学生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/************************************
函数功能:根据输入的姓名修改成绩
************************************/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3,mark4,mark5;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
printf("请输入新的第4门成绩:\n");
scanf("%f",&mark4);
printf("请输入新的第5门成绩:\n");
scanf("%f",&mark5);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
p->mark4=mark4;
p->mark5=mark5;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据输入的学号修改成绩
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3,mark4,mark5;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
printf("请输入新的第4门成绩:\n");
scanf("%f",&mark4);
printf("请输入新的第5门成绩:\n");
scanf("%f",&mark5);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
p->mark4=mark4;
p->mark5=mark5;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %s %f %f %f %f %f\n",p->studentNumber,p->studentName,p->studentSEX,p->className,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);
p=p->next;
}
fclose(fp);
}
/************************************
函数功能:显示优秀和不及格学生成绩
************************************/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的学生成绩如下:\n");
printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))||(6>((int)(p->mark4/10)))||(6>((int)(p->mark5/10))))/*只要有一科不及格就认为该生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("不及格的学生一共有%d人\n",count);
p=headLink->next;
printf("成绩优秀的学生成绩如下:\n");
printf("学号\t姓名\t性别\t班级\t成绩1\t成绩2\t成绩3\t成绩4\t成绩5\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10)))&&(8<=((int)(p->mark4/10)))&&(8<=((int)(p->mark5/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("成绩优秀的学生一共有%d人\n",count);
}
/************************************
函数功能:按总成绩排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
exchange.mark4=q->mark4;
exchange.mark5=q->mark5;
strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->studentSEX,p->studentSEX);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark2;
q->mark3=p->mark3;
q->mark4=p->mark4;
q->mark5=p->mark5;
strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
p->mark4=exchange.mark4;
p->mark5=exchange.mark5;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
我比较倾向于第二种,因为是自己调试的,呵呵~~
你只要把"成绩"改成你需要的其他信息就OK了~~
热心网友 时间:2023-05-10 04:49
发消息给你了
热心网友 时间:2023-05-10 04:50
一.需求分析
用动态链表储管理姓名、电话、住址、身份证等信息和具备添加、删除等编辑功能
可以通过身份证号码识别性别,省份,年龄
可以统计总人数,男生人数,女生人数,同一年龄段人数
可以通过姓名,身份证号查询与修改数据
具备较美观的界面与汉字提示
具备保存信息至文件,及从文件中读取信息的功能
用动态链表来储存数据,便于管理
二.概要设计
流程图
添加信息
声明一个结构体来储存数据,并通过声明指针来动态添加信息
显示信息
声明一个结构体指针,让指针等于头指针,并遍历所有节点,打印每个节点的信息
查询信息
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语言课程设计。
希望我的回答你能喜欢