学生信息管理系统设计.docx
《学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统设计.docx(15页珍藏版)》请在冰豆网上搜索。
学生信息管理系统设计
学生信息管理系统
--C语言版
主要功能介绍:
1实现菜单式选项功能,0—9均有特殊功能
2主要菜单介绍:
数字0:
返回功能,主界面
数字1:
学生信息的输入,不定数量的输入,判断是否继续输入
数字2:
学生信息的显示,可以显示此时学生信息的资料
数字3:
查找学生信息,查找是否存在要查询的学习信息
数字4:
删除学生信息,删除输入的学生信息
数字5:
插入学生信息
数字6:
修改学生信息有子菜单修改学生的任何资料可以反复修改
数字7:
对学生信息进行排列
数字8:
保存学生信息以文本的形式
数字9:
读取学生信息从文本中读取不需要重新输入数据,可读取以前的数据
说明:
此系统是根据其他网友的程序改编的,加入了几项!
此系统还有可以增加的空间,如可以添加登陆界面,输入密码等!
只是鉴于此系统没有用到指针,对于大多数人来说比较容易上手!
心得:
了解别人的程序基础上,进行了升级,遇到了一系列的问题。
如,修改学生信息函数中,保存原来的值,替换原来的值,还有就是scanf()中的&,用反了,该用的没有用,要用的却没有用。
最重要的问题是,完成以上后,把程序关闭后,却不可以从文件中读取。
起初想是文件函数用错了,查看课本,按照课本中的例题来了一遍,可以的,然后对照自己写的文件,是对的!
经过看,才知道是定义的inti惹的祸。
因为变量没有被调用时,还是0,为了验证我的假象,改了i的值,可以了!
所以问题就再于如何解决i的问题!
起初想将其与结构体保存在一个文件中,错了好多次,失败了!
所以保持到了两个文件中!
几位本例题!
有时文件忘记关闭了,造成错误!
此程序具有实际操作意义
复制程序:
看着结果分析程序!
学生信息管理系统源文件如下:
#include
#include
#include
#include
structstudent
{intid;//学号
charname[20];
intage;
charsex[10];
charbirthady[20];
inttel;
charnativeplace[50];
intE_mail;
}st[50];
inti=0;//学生数初始化,通过输入确定人数
voidshuru()
{
FILE*fp;
chara;
do{
printf("\n请输入学号:
");
scanf("%d",&st[i].id);
fflush(stdin);//清空回车字符头文件在stdio.h
printf("\n请输入姓名:
");
gets(st[i].name);//此处没有用到fflush只有在scanf用了
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);
fflush(stdin);
printf("\n请输入E_mail:
");
scanf("%d",&st[i].E_mail);
fflush(stdin);
printf("\n是否继续输入另外一个学生信息?
(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y'&&i<=50);
if((fp=(fopen("c:
\\stu_list1.txt","wb")))==NULL)
{
printf("cannotopenfile:
stu_list1!
\n");
exit(0);
}
fflush(stdin);
putw(i,fp);
fclose(fp);
}
voidsave()
{
inta;
FILE*fp;
if((fp=(fopen("c:
\\stu_list.txt","wb")))==NULL)
{
printf("cannotopenfile:
stu_list!
\n");
exit(0);
}
for(a=0;a
{
if((fwrite(&st[a],sizeof(structstudent),1,fp))!
=1)
{
printf("writeerror!
\n");
fclose(fp);
exit(0);
}
}
printf("\t\t恭喜你,要保存的学生信息已经为您保存完毕!
");
fclose(fp);
}
voidread()
{
FILE*fp,*fp1;
inta,k;
fp1=fopen("c:
\\stu_list1.txt","rb");
k=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
printf("\n");
printf("学号\t姓名\t年龄\t性别\t生日\t电话\t籍贯\t\tE_mail\n");
for(a=0;a{
fread(&st[a],sizeof(structstudent),1,fp);
printf("%d\t%s\t%d\t%s\t%s\t%d\t%s\t%d\n",st[a].id,st[a].name,st[a].age,st[a].sex,st[a].birthady,st[a].tel,st[a].nativeplace,st[a].E_mail);
}
fclose(fp);
printf("\t\t\t读取全部文件的学生信息完毕!
");
}
voidxianshi()
{
intj,k;
FILE*fp,*fp1;
fp1=fopen("c:
\\stu_list1.txt","rb");
k=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
printf("\n");
printf("学号\t姓名\t年龄\t性别\t生日\t电话\t籍贯\tE_mail\n");
for(j=0;jprintf("%d\t%s\t%d\t%s\t%s\t%d\t%s\t%d\n",st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace,st[j].E_mail);
}
voidpaixu()//按年龄从大到小排序函数
{
intj,k,b;
inttemp;
FILE*fp,*fp1;
fp1=fopen("c:
\\stu_list1.txt","rb");
b=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
for(j=0;j
{
for(k=0;k{
if(st[k].age{
temp=st[k].age;
st[k].age=st[k+1].age;
st[k+1].age=temp;
}
}
}
xianshi();//排序后输出
}
voidchazhao()
{intm,k;
charname[20],b;
FILE*fp,*fp1;
fp1=fopen("c:
\\stu_list1.txt","rb");
k=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
printf("\n");
do
{printf("\n请输入想查找的学生姓名:
");
fflush(stdin);
gets(name);
for(m=0;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籍贯\tE_mail\n");
printf("%d\t%s\t%d\t%s\t%s\t%d\t%s\t%d\n",st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace,st[m].E_mail);
}
printf("\n是否查找另一个学生的信息?
(y/n)");
fflush(stdin);
b=getchar();
}while(b=='y');
}
voidshanchu()
{
charname[20],c;
inta,b,k;
FILE*fp,*fp1;
fp1=fopen("c:
\\stu_list1.txt","rb");
k=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
printf("\n");
do
{printf("\n请输入要删除的学生姓名:
\n");
fflush(stdin);
gets(name);
for(a=0;a
{
if(strcmp(name,st[a].name)==0)break;
}
for(b=a;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');
}
voidcharu()
{
shuru();
paixu();
}
voidxiugai()
{
intb,a,m,k,q;
intnian0,nian1;
intte0,te1;
intemail0,email1;
charname[20],ch0[20],ch1[20];
charsex0[10],sex1[10];
charbir0[20],bir1[20];
charnative0[50],native1[50];
charen_d;
FILE*fp,*fp1;
fp1=fopen("c:
\\stu_list1.txt","rb");
q=getw(fp1);
fclose(fp1);
fp=fopen("c:
\\stu_list.txt","rb");
printf("\n");
do
{
printf("按照姓名进行信息查询修改,请输入要修改学生的姓名:
");
fflush(stdin);
gets(name);
fflush(stdin);
for(a=0;a{
if(strcmp(name,st[a].name)==0)
printf("\n\t\t已经找到你要修改的人员!
!
\n");
else
{
if(a==i-1)
{printf("\n\t\t对不起,没有找到你要查询的姓名!
请查证后再次查询!
!
\n");
gotoloop1;}
elsecontinue;
}
break;
}
printf("***你想修改学生的信息有如下选择***\n");
printf("**1---学号2---姓名3---年龄**\n");
printf("**4---性别5---生日6---电话**\n");
printf("**7---籍贯8---E_mail**\n");
printf("*********************\n");
printf("\n");printf("\n");
printf("请输入要修改的选项:
");
scanf("%d",&b);
fflush(stdin);
switch(b)
{
case1:
printf("你选择了修改学生的学号,请输入修改后的学生学号:
");scanf("%d",&m);printf("\n");k=st[a].id;st[a].id=m;
printf("YES,修改后学生学号是:
%d,替代了原来为%d的学号",m,k);break;
case2:
printf("你选择了修改学生的姓名,请输入修改后的学生姓名:
");scanf("%s",ch1);strcpy(ch0,st[a].name);strcpy(st[a].name,ch1);printf("\n");
printf("YES,修改后学生姓名是:
%s,替代了原来为%s的姓名",ch1,ch0);break;
case3:
printf("你选择了修改学生的年龄,请输入修改后的学生年龄:
");scanf("%d",&nian1);printf("\n");nian0=st[a].age;st[a].age=nian1;
printf("YES,修改后学生年龄是:
%d,替代了原来为%d的年龄",nian1,nian0);break;
case4:
printf("你选择了修改学生的性别,请输入修改后的学生性别:
");scanf("%s",sex1);strcpy(sex0,st[a].sex);strcpy(st[a].sex,sex1);printf("\n");
printf("YES,修改后学生生日是:
%s,替代了原来为%s的生日",sex1,sex0);break;
case5:
printf("你选择了修改学生的生日,请输入修改后的学生生日:
");scanf("%s",bir1);strcpy(bir0,st[a].birthady);strcpy(st[a].birthady,bir1);printf("\n");
printf("YES,修改后学生生日是:
%s,替代了原来为%s的生日",bir1,bir0);break;
case6:
printf("你选择了修改学生的电话,请输入修改后的学生电话:
");scanf("%d",te1);te0=st[a].tel;st[a].tel=te1;printf("\n");
printf("YES,修改后学生电话是:
%d,替代了原来为%d的电话",te1,te0);break;
case7:
printf("你选择了修改学生的籍贯,请输入修改后的学生籍贯:
");scanf("%s",native1);strcpy(native0,st[a].nativeplace);strcpy(st[a].nativeplace,native1);printf("\n");
printf("YES,修改后学生籍贯是:
%s,替代了原来为%s的籍贯",native1,native0);break;
case8:
printf("你选择了修改学生的电话,请输入修改后的学生电话:
");scanf("%d",email1);email0=st[a].E_mail;st[a].E_mail=email1;printf("\n");
printf("YES,修改后学生电话是:
%d,替代了原来为%d的电话",email1,email0);break;
default:
printf("查询错误选项,确认后再查询");printf("\n");
}
fflush(stdin);
loop1:
printf("\n是否继续修改学生信息,如果继续,请按y,否则请按n:
");
en_d=getchar();
fflush(stdin);
}while(en_d=='y');
}
voidmain()//主函数
{intchange;
do{
system("cls");//清屏
printf("\n");
printf("\n");//软键盘有或者拼xing第五个
printf("******欢迎使用学生信息管理*******\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※※\n");
printf("※1.输入学生信息2.显示学生信息※\n");
printf("※※\n");
printf("※3.查找学生信息4.删除学生信息※\n");
printf("※※\n");
printf("※5.插入学生信息6.修改学生信息※\n");
printf("※※\n");
printf("※7.排序学生信息8.保存学生信息※\n");
printf("※※\n");
printf("※9.读取文件学生信息※\n");
printf("※※\n");
printf("※0.退出学生管理系统※\n");
printf("※※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("\n");printf("\n");
fflush(stdin);
printf("请输入功能选项:
");
scanf("%d",&change);
switch(change)
{case1:
shuru();break;
case2:
xianshi();break;
case3:
chazhao();break;
case4:
shanchu();break;
case5:
charu();break;
case6:
xiugai();break;
case7:
paixu();break;
case8:
save();break;
case9:
read();break;
case0:
break;
}
getch();
}while(change!
=0);
}