学生证管理系统.docx
- 文档编号:13321680
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:22
- 大小:33.67KB
学生证管理系统.docx
《学生证管理系统.docx》由会员分享,可在线阅读,更多相关《学生证管理系统.docx(22页珍藏版)》请在冰点文库上搜索。
学生证管理系统
《C语言程序设计》课程设计
实验报告
学院:
班级:
组长:
学号:
成员
开课学期:
实验日期:
指导教师:
1.概要设计:
学生证的管理程序主要包含学生信息的录入、修改、删除、查询、统计等模块。
为了各模块的独立性,将显示模块分别镶嵌在录入、修改、删除、查询、统计等模块中。
2.详细设计
#include
#include
#include
voidinput(structnode*);
voidsearch(structnode*);
voidxiugai(structnode*);//函数声明
voiddel(structnode*);
voidtongji(structnode*);
voidPrint(structnode*student);
structDate
{
intmonth;
intday;
intyear;
};
structstud//定义结构体变量
{
intnum;//学号
charname[25];//姓名
charsex[10];//性别
structDatebirthday;//出生日期
structDatestarttime;//开学日期
charxuezhi[20];//学制
chardepartment[25];//学院
charmajor[25];//专业
charclas[25];//班级
};
structnode//建立链表
{structstuddata;
structnode*next;
};
staticstructnode*Head=NULL;//定义静态局部变量Head
FILE*fp;//定义文件变量
structstuddata;
//主函数
intmain(void)
{
intchoice;
do
{
system("CLS");//清屏
printf("\n\t\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3欢迎进入安徽科技学院\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3");
printf("\n\t==================学生证管理系统==================\n");
printf("\t--------------------------------------------------\n");
printf("\t******\n");
printf("\t***1--录入2--查询***\n");
printf("\t******\n");
printf("\t******\n");
printf("\t***3--修改4--删除***\n");
printf("\t******\n");
printf("\t******\n");
printf("\t***5--统计0--退出***\n");
printf("\t******\n");
printf("\t--------------------------------------------------\n");
printf("\t\t请您在上述功能中选择(0--5):
");
scanf("%d",&choice);
while(choice<0||choice>5)//保证正确的输入
{
printf("\n您的输入有误,请重新选择:
");
scanf("%d",&choice);
}
switch(choice)//选择相应的功能
{
case1:
input(Head);break;//调用录入函数
case2:
search(Head);break;//调用查询函数
case3:
xiugai(Head);break;//调用修改函数
case4:
del(Head);break;//调用删除函数
case5:
tongji(Head);break;//调用统计函数
case0:
exit(0);
}
}while
(1);//无限循环,直到用户选择0退出程序
return0;
}
//录入函数
voidinput(structnode*P)
{
structnode*This=NULL,*New=NULL;
New=(structnode*)malloc(sizeof(structnode));//开辟一个新结点的存储空间
if(P==NULL)//将新结点链接到表尾
{
P=New;
Head=P;
}
else
{
This=P;
while(This->next!
=NULL)
This=This->next;
This->next=New;
}
This=New;//输入新结点数据
printf("\n\t==================学生证管理系统==================\n");
printf("\t*********************录入新信息********************\n");
printf("请输入新添加学生的信息:
");
printf("\n学号:
");
scanf("%d",&(This->data.num));
printf("\n姓名:
");
scanf("%s",This->data.name);
printf("\n性别(男/女):
");
scanf("%s",This->data.sex);
printf("\n出生年月(月/日/年如8/6/1986):
");
scanf("%d/%d/%d",&This->data.birthday.day,&This->data.birthday.month,&This->data.birthday.year);
printf("\n入学时间(月/日/年如9/1/2007):
");
scanf("%d/%d/%d",&This->data.starttime.day,&This->data.starttime.month,&This->data.starttime.year);
printf("\n学制:
");
scanf("%s",This->data.xuezhi);
printf("\n学院:
");
scanf("%s",This->data.department);
printf("\n专业:
");
scanf("%s",This->data.major);
printf("\n班级:
");
scanf("%s",This->data.clas);
This->next=NULL;
Print(This);//输出新结点信息
if((fp=fopen("d:
\\学生证管理程序.txt","ab+"))==NULL)//打开一个读写文件
{printf("无法打开此文件!
");
return;
}
while(This)
{fwrite(&This->data,sizeof(structstud),1,fp);
This=This->next;
}
fclose(fp);
printf("\n您已成功添加了一条新信息.");
printf("\n按任意键返回主目录!
");
getchar();//吸收“任意键”
getchar();//吸收回车键
}
//查询函数
voidsearch(structnode*Head)
{
intn;
structnode*This;//输出选择界面
printf("\n\n\t==================学生证管理系统==================");
printf("\n\t***********************查询***********************\n");
printf("\t******\n");
printf("\t***1----------按学号查询***\n");
printf("\t******\n");
printf("\t******\n");
printf("\t***2----------按姓名查询***\n");
printf("\t******\n");
printf("\t******\n");
printf("\t***3----------按班级查询***\n");
printf("\t******\n");
printf("\t**************************************************\n");
printf("\t\t请您在上述功能中选择(1--3):
");
scanf("%d",&n);
while(n<1||n>3)//保证正确的输入
{
printf("\n您的输入有误,请重新选择:
");
scanf("%d",&n);
}
switch(n)//选择相应的查询方式
{
case1:
//按学号查询
This=Head;//链接到表头
inttemp1;//定义临时变量temb1
printf("\n请输入您要查询的学生的学号:
");
scanf("%d",&temp1);
while(This!
=NULL)//链表不为空时
{
if(temp1==This->data.num)
break;
This=This->next;
}
if(This==NULL)
printf("\n没有找到该学生!
");
else
{
printf("\n\t已找到该学生:
");
Print(This);
}
break;
case2:
//按姓名查询
This=Head;
chartemp2[20];
printf("\n请输入您要查询的学生的姓名:
");
scanf("%s",temp2);
while(This!
=NULL)
{
if(strcmp(temp2,This->data.name)==0)break;
This=This->next;
}
if(This==NULL)
printf("\n没有找到该学生!
");
else
{
printf("\n\t已找到该学生:
");
Print(This);
}
break;
case3:
//按班级查询
This=Head;
chartemp3[20];inti=0;
printf("\n请输入您要查询的班级名称:
");
scanf("%s",temp3);
if(This==NULL)
printf("\n没有找到该班级学生的信息!
");
else
{
while(This!
=NULL)
{
if(strcmp(temp3,This->data.clas)==0)
{
Print(This);
i++;
}
This=This->next;
}
if(i==0)
printf("\n没有找到该班级学生的信息!
");
else
{
printf("\n*************************************************\n");
printf("已找到%d个该班的学生,具体成员如上.",i);
}
}
break;
}
printf("\n按任意键返回主目录!
");
getchar();
getchar();
}
//修改函数
voidxiugai(structnode*Head)
{
intm,n;
structnode*This=Head;
printf("\n请输入您要修改的学生的学号:
");
scanf("%d",&m);
while(This!
=NULL)//查找相应学号的学生
{
if(m==This->data.num)
break;
This=This->next;
}
if(This==NULL)
printf("\n没有找到该学生的信息!
");
else
{
printf("\n已找到该学生.");
Print(This);//输出该学生的信息
printf("\n\t==================学生证管理系统==================");
printf("\n\t**********************修改************************\n");
printf("\t******\n");
printf("\t***1--学号2--姓名***\n");
printf("\t******\n");
printf("\t***3--性别4--出生日期***\n");
printf("\t******\n");
printf("\t***5--入学日期6--学制***\n");
printf("\t******\n");
printf("\t***7--学院8--专业***\n");
printf("\t******\n");
printf("\t***9--班级0--返回***\n");
printf("\t******\n");
printf("\t**************************************************\n");
printf("\t\t请选择您要修改的项目:
");
scanf("%d",&n);
while(n<0||n>9)//保证正确的输入
{
printf("\n您的输入有误,请重新选择:
");
scanf("%d",&n);
}
switch(n)
{
case1:
//修改学号
printf("\n请输入修改后的学号:
");
scanf("%d",&This->data.num);
break;
case2:
//修改姓名
printf("\n请输入修改后的姓名:
");
scanf("%s",This->data.name);
break;
case3:
//修改性别
printf("\n请输入修改后的性别:
");
scanf("%s",This->data.sex);
break;
case4:
//修改出生日期
printf("\n请输入修改后的出生日期(月/日/年):
");
scanf("%d/%d/%d",&This->data.birthday.day,&This->data.birthday.month,&This->data.birthday.year);
break;
case5:
//修改入学日期
printf("\n请输入修改后的入学日期(月/日/年):
");
scanf("%d/%d/%d",&This->data.starttime.day,&This->data.starttime.month,&This->data.starttime.year);
break;
case6:
//修改学制
printf("\n请输入修改后的学制:
");
scanf("%s",This->data.xuezhi);
break;
case7:
//修改学院
printf("\n请输入修改后的学院:
");
scanf("%s",This->data.department);
break;
case8:
//修改专业
printf("\n请输入修改后的专业:
");
scanf("%s",This->data.major);
break;
case9:
//修改班级
printf("\n请输入修改后的班级:
");
scanf("%s",This->data.clas);
break;
}
printf("已成功修改该学生的信息.");
}
printf("\n按任意键返回主目录!
");
getchar();
getchar();
}
//删除函数
voiddel(structnode*pp)
{
intm;structnode*p=pp,*This=pp;charchoice;
printf("\n请输入您要删除的学生的学号:
");
scanf("%d",&m);
while(This!
=NULL)//查找相应学号的学生
{
if(m==This->data.num)
break;
p=This;
This=This->next;
}
if(This==NULL)
printf("\n没有找到该学生的信息!
");
else
{
printf("\n已找到该学生的信息:
");
Print(This);
printf("\n您确实要删除该学生的信息吗(Y/N)?
");//用户确认操作
scanf("%c",&choice);
while(choice!
='Y'&&choice!
='y'&&choice!
='N'&&choice!
='n')
{
printf("\n您的输入有误,请重新确认:
");//保证正确的输入
scanf("%c",&choice);
}
if(choice=='Y'||choice=='y')//删除该学生对应的结点
{
if(p==This)
{
Head=This->next;
free(This);
}
else
{
p->next=This->next;
free(This);
}
printf("\n已成功删除该信息!
");
}
}
printf("\n按任意键返回主目录!
");
getchar();
getchar();
}
//统计函数
voidtongji(structnode*p)
{
intx,i;
union//定义一个共用体变量
{
structDatea;
charb[25];
}temp;
structnode*This=NULL;//输出统计项目菜单
printf("\n\t==================学生证管理系统==================\n");
printf("\n\t***********************统计***********************\n");
printf("\t******\n");
printf("\t***1--性别2--出生日期***\n");
printf("\t******\n");
printf("\t***3--入学日期4--学制***\n");
printf("\t******\n");
printf("\t***5--学院6--专业***\n");
printf("\t******\n");
printf("\t***7--班级0--返回***\n");
printf("\t******\n");
printf("\t**************************************************\n");
printf("\t\t请选择您要统计的项目:
");
scanf("%d",&x);
while(x<0||x>7)//保证正确的输入
{
printf("\n您的输入有误,请重新选择:
");
scanf("%d",&x);
}
switch(x)//选择相应的统计项目
{
case1:
printf("\n请输入您要统计的性别:
");
scanf("%s",&temp.b);
This=p;i=0;
while(This!
=NULL)//输出并统计相应性别的人数
{
if(strcmp(This->data.sex,temp.b)==0)
{
i++;
Print(This);
}
This=This->next;
}
printf("\n*************************************************\n");
printf("\n性别为%s的学生共有%d人,具体成员如上.",temp.b,i);
break;
case2:
printf("\n请您要输入统计的出生日期(月/日/年):
");
scanf("%d/%d/%d",&temp.a.month,&temp.a.day,&temp.a.year);
This=p;i=0;
while(This!
=NULL)//输出并统计相应出生日期的人数
{
if(This->data.birthday.month==temp.a.month&&This->data.birthday.day==temp.a.day&&This->data.birthday.year==temp.a.year)
{
i++;
Print(This);
}
This=This->next;
}
printf("\n*************************************************\n");
printf("\n出生日期为%2.2d/%2.2d/%4.4d的学生共有%d人,具体成员如上.",temp.a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生证 管理 系统