学生信息管理c语言程序.docx
- 文档编号:3870492
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:18
- 大小:18.39KB
学生信息管理c语言程序.docx
《学生信息管理c语言程序.docx》由会员分享,可在线阅读,更多相关《学生信息管理c语言程序.docx(18页珍藏版)》请在冰豆网上搜索。
学生信息管理c语言程序
/*“学生信息管理系统”c语言程序使用前请先建立”FILE.DA”和”superUser.txt”文件!
*/
#include"malloc.h"
#include"conio.h"
#include"string.h"
#include"ctype.h"
#include"stdio.h"
#defineLENsizeof(structstudent)
structstudent
{
charNo[6],name[10],sex[5],age[4];
charclassName[10],address[30],tel[15];
structstudent*next;
};
structstudent*head;
//函数声明
intAdd(void);
intDeleteStu(void);
intRepair(void);
intVerificationIdentity(void);
intMaintain(void);
intFindName(void);
intFindNumber(void);
intFind(void);
intFindAddrApart(void);
intInitStuInfo(void);
//主函数
intmain(intargc,char*argv[])
{
intinitFlag,quitFlag,maintainFlag,findFlag;
charch;
quitFlag=1;
initFlag=InitStuInfo();
if(initFlag)
while(quitFlag)
{
printf("\n\t\t**************学籍管理系统**************\n");
printf("\t\t*1.查询*\n");
printf("\t\t*2.维护*\n");
printf("\t\t*0.退出*\n");
printf("\n\t\t****************************************\n");
printf("请选择(1/2/0):
");
ch=getche();
switch(ch)
{
case'1':
findFlag=Find();
//调用查询模块
break;
case'2':
maintainFlag=Maintain();
//调用维护模块
break;
case'0':
quitFlag=0;
break;
default:
printf("\n输入错误,请重新选择\n\n\n");
break;
}
}
else
{
printf("\n初始化学生信息失败!
");
return1;
}
printf("\n再见!
请按任意键退出.");
getch();
return0;
}
//追加新的学生信息
intAdd(void)
{
structstudent*p3,*p2;
charch;
intaddFlag;
p2=head;
while(p2->next!
=NULL)
p2=p2->next;
ch='y';
while(tolower(ch)=='y')
{
p3=(structstudent*)malloc(LEN);
printf("\n请按如下格式输入:
\n");
printf("学号:
");
gets(p3->No);
printf("姓名:
");
gets(p3->name);
printf("年龄:
");
gets(p3->age);
printf("性别:
");
gets(p3->sex);
printf("班级:
");
gets(p3->className);
printf("家庭地址:
");
gets(p3->address);
printf("电话:
");
gets(p3->tel);
p3->next=NULL;
printf("\n请确认上述输入[y/Y],否则按其他任意键继续");
ch=getche();
if(tolower(ch)=='y')
{
p2->next=p3;
p2=p3;
p3=NULL;
printf("\n追加学生信息成功!
......按任意键继续......");
getch();
putch('\n');
addFlag=1;
}
else
{
printf("\n未能追加学生信息!
!
!
......按任意键继续......");
getch();
putch('\n');
addFlag=2;
}
printf("\n是否增加下一个学生信息,如果增加,键入[y/Y];否则键入[n/N]:
");
ch=getch();
}
p2=NULL;
returnaddFlag;
}//Add
//删除学生信息
intDeleteStu(void)
{
charch,stuNo[10];
intdeleteFlag;
structstudent*p,*q;
ch='y';
while(tolower(ch)=='y')
{
printf("\n请输入待删除学生的学号(按回车键确认):
");
gets(stuNo);
p=head;
q=NULL;
while(p!
=NULL)
{
if(strcmp(p->No,stuNo))
{
q=p;
p=p->next;
}
else
{
printf("\n您要删除的学生姓名是:
%是\n",p->name);
printf("请您再次确认[y/Y]:
");
ch=getche();
if(tolower(ch)=='y')
{
q->next=p->next;
deleteFlag=3;
break;
}
else
{
deleteFlag=4;
break;
}
}
}
if(p==NULL)
{
printf("\n不存在您要删除的学生信息,按任意键继续......\n");
deleteFlag=5;
getche();
}
printf("\n是否继续删除下一个学生信息[y/Y],不删除按其他任意键......\n");
ch=getche();
}
returndeleteFlag;
}//DeleteStu
//修改学生信息
intRepair(void)
{
intrepairFlag;
charch,stuNo[10];
structstudent*p,*q;
do
{
printf("\n请输入待修改学生的学号(按回车确认):
");
gets(stuNo);
p=head;
q=NULL;
while(p!
=NULL)
{
if(strcmp(p->No,stuNo))
p=p->next;
elsebreak;
}
while
(1)
{
printf("\n您将要修改的学生信息是:
\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",p->No,p->name,p->age,p->sex,p->className,p->address,p->tel);
printf("\n请输入您所要修改的信息名称:
\n");
printf("1学号2姓名3年龄4性别5班级6家庭住址7电话\n");
printf("请您选择:
");
ch=getche();
switch(ch)
{
case'1':
printf("\n请输入新的信息(按回车结束):
");
gets(p->No);
repairFlag=6;
break;
case'2':
printf("\n请输入新的信息(按回车结束):
");
gets(p->name);
repairFlag=6;
break;
case'3':
printf("\n请输入新的信息(按回车结束):
");
gets(p->age);
repairFlag=6;
break;
case'4':
printf("\n请输入新的信息(按回车结束):
");
gets(p->sex);
repairFlag=6;
break;
case'5':
printf("\n请输入新的信息(按回车结束):
");
gets(p->className);
repairFlag=6;
break;
case'6':
printf("\n请输入新的信息(按回车结束):
");
gets(p->address);
repairFlag=6;
break;
case'7':
printf("\n请输入新的信息(按回车结束):
");
gets(p->tel);
repairFlag=6;
break;
default:
printf("\n输入错误,请重新输入:
\n");
repairFlag=5;
break;
}
printf("\n是否还要继续修改学生信息[y/n]:
");
ch=getche();
if(tolower(ch)=='y')
continue;
elsebreak;
}
printf("\n是否还要继续修改学生信息[y/n]:
");
ch=getche();
}while(tolower(ch)=='y');
returnrepairFlag;
}
//维护人员权限验证
intVerificationIdentity(void)
{
charuserID[20],passWord[20];//存放由键盘输入的用户名和口令
charsuperUID[20],passWD[20];//存放文件中读取的用户名和口令
inti,legalUser=0;
charch;
FILE*fp;
fp=fopen("superUser.txt","r");
if(fp==NULL)
{
printf("\n文件不存在!
按任意键继续\n");
getch();
}//superUserFlag=0
else
{
do
{
printf("\n请输入用户名(小于15个字符):
");
i=0;
while(isalpha(ch=getch())&&(i<15))
{
putchar(ch);
userID[i]=ch;
i++;
}
userID[i]='\0';
printf("\n请输入密码(小于10个字符):
");
i=0;
while(isdigit(ch=getch())&&(i<10))
{
putchar('*');
passWord[i]=ch;
i++;
}
passWord[i]='\0';
rewind(fp);
while(!
feof(fp))
{
fscanf(fp,"%s\t%s\t\n",superUID,passWD);//从权限文件中读取用户名和密码
if((strcmp(userID,superUID)==0)&&(strcmp(passWord,passWD)==0))//判断用户名和密码是否与权限规定的相符
{
legalUser=1;
break;
}
}
if(legalUser)
break;
else
{
printf("\n是否重新输入用户名和密码?
[y/n]");
ch=getche();
}
}while(ch=='y');
}
returnlegalUser;
}
//将修改的学生信息写入文件
intSave(void)
{
FILE*fp;
structstudent*p;
p=head;
if((fp=fopen("FILE.DAT","w"))==NULL)
{
printf("\n保存文件不正常,请核对文件名\n");
fclose(fp);
return1;
}
else
{
rewind(fp);
while(p!
=NULL)//将链表中的内容写入文件
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",p->No,p->name,p->age,p->sex,p->className,p->address,p->tel);
p=p->next;
}
fclose(fp);
return0;
}
}
//维护模块
intMaintain(void)
{
charch;
intsuccess,saveFlag,maintainR=4;
success=VerificationIdentity();
if(success==0)
{
printf("\n你是无权用户!
!
!
");
maintainR=5;
}
else
{
do
{
printf("\n\t\t*****************查询*****************\n");
printf("\t\t*1.增加*\n");
printf("\t\t*2.删除*\n");
printf("\t\t*3.修改*\n");
printf("\t\t*0.退出*\n");
printf("\n\t\t****************************************\n");
printf("\n请输入选择(1/2/3/0):
");
ch=getche();
switch(ch)
{
case'1':
maintainR=Add();break;
case'2':
maintainR=DeleteStu();break;
case'3':
maintainR=Repair();break;
case'0':
maintainR=0;break;
default:
printf("\n输入错误,请重新输入你的选择:
");break;
}
}while(maintainR!
=0);
printf("\n你已经完成了对学生信息的维护,\n");
printf("请你确认是否永久保存你所做的修改(y/n):
");
ch=getche();
if(tolower(ch)=='y')
{
saveFlag=Save();
if(saveFlag)maintainR=4;
}
}
returnmaintainR;
}//Maintain
//按住址查询
intFindAddrApart(void)
{
charsaddress[20];\
structstudent*p;
intflag;
flag=5;
p=head;
printf("\n请输入你想要查找学生的住址:
");
gets(saddress);
while(p!
=NULL)
{
if(strcmp(saddress,p->address)==0)
{
printf("学号:
%s\n",p->No);
printf("姓名:
%s\n",p->name);
printf("年龄:
%s\n",p->age);
printf("性别:
%s\n",p->sex);
printf("班级:
%s\n",p->className);
flag=1;
}
p=p->next;
}
returnflag;
}//FindAddrApart
//按姓名查询
intFindName(void)
{
charsname[20];
structstudent*p;
intflag;
flag=5;
p=head;
printf("\n请输入你想要查找学生的姓名:
");
gets(sname);
while(p!
=NULL)
{
if(strcmp(sname,p->name)==0)
{
printf("学号:
%s\n",p->No);
printf("姓名:
%s\n",p->name);
printf("年龄:
%s\n",p->age);
printf("性别:
%s\n",p->sex);
printf("班级:
%s\n",p->className);
printf("地址:
%s\n",p->address);
printf("电话:
%s\n",p->tel);
flag=1;
}
p=p->next;
}
returnflag;
}//FindName
//按学号查询
intFindNumber(void)
{
charsno[10];
structstudent*p;
intflag;
flag=5;
p=head;
printf("\n请输入你想要查找学生的学号[000001~000040]:
");
gets(sno);
while(p!
=NULL)
{
if(strcmp(sno,p->No)==0)
{
printf("学号:
%s\n",p->No);
printf("姓名:
%s\n",p->name);
printf("年龄:
%s\n",p->age);
printf("性别:
%s\n",p->sex);
printf("班级:
%s\n",p->className);
printf("住址:
%s\n",p->address);
printf("电话:
%s\n",p->tel);
flag=1;
}
p=p->next;
}
returnflag;
}//FindNumber
//查询模块
intFind(void)
{
charch;
intflag;
flag=4;
while(flag)
{
printf("\n\t\t*****************查询*****************\n");
printf("\t\t*1.学号*\n");
printf("\t\t*2.姓名*\n");
printf("\t\t*3.住址/系别*\n");
printf("\t\t*0.退出*\n");
printf("\n\t\t****************************************\n");
printf("请输入选择(1/2/3/0):
");
ch=getche();
switch(ch)
{
case'1':
flag=FindNumber();break;
case'2':
flag=FindName();break;
case'3':
flag=FindAddrApart();break;
case'0':
flag=0;break;
default:
printf("\n输入错误,请重新输入:
");flag=4;break;
}
if(flag==5)
{
printf("你所查找的学生不存在!
\n");
ch=getche();
if(tolower(ch)=='y')
continue;
elseflag=0;
}
}
returnflag;
}//Find
//初始化学生信息。
从文件中读取学生信息,用链接存放
intInitStuInfo(void)
{
FILE*fp;
structstudent*p1,*p2;
fp=fopen("FILE.DAT","r");
if(fp==NULL)
{
printf("未能初始化学生信息");
fclose(fp);
return0;
}
else
{
p1=(structstudent*)malloc(LEN);
head=p1;
while(!
feof(fp))
{
fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",p1->No,p1->name,p1->age,p1->sex,p1->className,p1->address,p1->tel);
p2=p1;
p1=(structstudent*)malloc(LEN);
p2->next=p1;
}
p2->next=NULL;
p2=NULL;
free(p1);
p1=NULL;
p1=head;
while(p1!
=NULL)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",p1->No,p1->name,p1->age,p1->sex,p1->className,p1->address,p1->tel);
p1=p1->next;
}
fclose(fp);
return1;
}
}//InitStuInfo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 语言 程序