登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

学生信息管理  

2006-02-23 21:56:05|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//谢鹏 07036052

//学生信息管理


//2005/3/8

#include "stdlib.h"
#include "malloc.h"
#include "conio.h"
#include "string.h"
#include "ctype.h"
#include "stdio.h"
#define LEN sizeof(struct student)

struct student
{
char No[10],name[10],sex[5],age[4];
char className[10],address[100],email[50],QQ[20],tel[15];//20->10?
struct student*next;
};
struct student*head;

//function prototype declaration
int add(void);
int deleteStu(void);
int repair(void);
int verificationIdentity(void);
int maintain(void);
int findname(void);
int findnumber();
int find(void);
int findaddrapart(void);
int InitStuInfo(void);

int main(int argc, char* argv[])
{
int initFlag,quitFlag,maintainFlag,findFlag;
char ch;

quitFlag=1;

initFlag=InitStuInfo();

if(initFlag)
while(quitFlag)
{
printf("\n\t\t*****通信工程学院1--02学生信息查询系统*****\n");
printf("\t\t* 1.查询 *\n");
printf("\t\t* 2.维护 *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t*******************************************\n");
printf("请选择(1/2/0):\n");
ch=getch();
switch(ch)
{
case'1':findFlag=find();
//about finding
break;
case'2':maintainFlag=maintain();
//about maintaining
break;
case'0':quitFlag=0;
break;
default: printf("\n输入错误,请重新选择\n\n\n");
break;

}
}
else
{
printf("initilization fail!");
return 1;
}
printf("Successful.bye bye!\n");
printf("press any key to END");
getch();
return 0;
}


int add(void)
{
struct student*p3,*p2;
char ch;
int addFlag;

p2=head;
while(p2->next!=NULL)
p2=p2->next;

ch='y';
while(tolower(ch)=='y')
{
p3=(struct student*)malloc(LEN);
printf("\n请按如下格式输入:\n");
printf("学号:");
gets(p3->No);
printf("姓名:");
gets(p3->age);
printf("性别:");
gets(p3->sex);
printf("班级:");
gets(p3->className);
printf("家庭住址:");
gets(p3->address);
printf("E-mail:");
gets(p3->email);
printf("QQ:");
gets(p3->QQ);
printf("电话:");
gets(p3->tel);
printf("请确认上述输入[y/Y],否则按其他任意键继续?");
ch=getch();
if(tolower(ch)=='y')
{
p2->next=p3;
p2=p3;
p3=NULL;
printf("追加学生信息成功!!按任意键继续------");
getch();
putch('\n');
addFlag=1;
}else

{
printf("未能追加学生信息!!按任意键继续------");
getch();
putch('\n');
addFlag=2;
}

printf("是否增加下一个学生信息,如果是,键入[y/Y];否则键入[n/N]:");
ch=getch();

}
p2=NULL;
return addFlag;
}

int deleteStu(void)
{
char ch,stuNo[10];
int deleteFlag;
struct student*p,*q;

ch='y';
while(tolower(ch)=='y')
{
printf("请输入待删除的学生的学号(用 回车 确认):");
gets(stuNo);

p=head;
q=NULL;
while(p!=NULL)
{
if(strcmp(p->No,stuNo))
{
q=p;
p=p->next;}
else
{
printf("您要删除的学生的姓名是:%s\n",p->name);
printf("请您再次确认[y/Y]:");
ch=getch();
if(tolower(ch)=='y')
{
q->next=p->next;
deleteFlag=3;
}
else
deleteFlag=4;
}
}
if(p==NULL)
{
printf("\n不存在您要删除的学生信息,按任意键继续-------\n");
deleteFlag=4;
getch();
}
printf("是否继续删除下一个学生的信息[y/Y],不删除按其他任意键--------\n");
ch=getch();
}
return(deleteFlag);
}

int repair(void)
{
int repairFlag;
char ch,stuNo[10];
struct student*p,*q;

do
{
printf("请输入待修改学生的学号(用 回车 确认):");
gets(stuNo);

p=head;
q=NULL;
while(p!=NULL)
{
if(strcmp(p->No,stuNo))
p=p->next;
else break;
}
while(1)
{
printf("您要修改的学生的原始信息是:\n");
printf("%s\t%s\t%s\t%s\t%s\t\n",
p->No,p->name,p->sex,p->age,p->className);
printf("%s\t%s\t%s\t%s\t\n",p->address,p->email,p->QQ,p->tel);
printf("请输入所要修改的信息名称:\n");
printf("1.学号 2.姓名 3.年龄 4.性别 5.班级 6.家庭住址 7.E-mail 8.QQ 9.电话\n");
printf("请选择:\n");
ch=getch();
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->email);repairFlag=6;break;
case'8':printf("\n请输入新的信息(回车结束):");
gets(p->QQ);repairFlag=6;break;
case'9':printf("\n请输入新的信息(回车结束):");
gets(p->tel);repairFlag=6;break;
default: printf("\n输入错误,请重新输入:\n");
repairFlag=5;break;
}
printf("是否还要修改该学生的信息[y/n]:\n");
ch=getch();
if(tolower(ch)=='y')
continue;
else
break;
}
printf("是否还要修改其他学生的信息[y/n]:\n");
ch=getch();
}
while(tolower(ch)=='y');
return repairFlag;
}

int verificationIdentity(void)
{
char userID[20],passWord[20];//from keyboard
char superUID[20],passWD[20];//from user file
int i,legalUser;
char ch;
FILE*fp;

legalUser=0;

fp=fopen("superUser.txt","r");
if(fp==NULL)
{
printf("superuser file does not exist\n");
printf("press any key to continue");
getch();
// superUserFlag=0;
}
else
{
do
{

printf("请输入用户名(<18个字符/数字):");
i=0;
while(isalpha(ch=getch())&&(i<18))
{
putchar(ch);
userID[i]=ch;
i++;
}
userID[i]='\0';
printf("请输入用户名(<18个字符/数字):");
i=0;
while(isalpha(ch=getch())&&(i<18))
{
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("是否重新输入用户名和密码?(y/n)");
ch=getch();
}
}
while((ch=='y')||(ch=='Y'));
}
return(legalUser);
}

int save(void)
{
FILE*fp;
struct student*p;
p=head;
if((fp=fopen("FILE.DAT","w"))==NULL)
{
printf("保存文件不正常,请核对文件名!\n");
fclose(fp);
return 1;
}
else
{
rewind(fp);
while(p!=NULL)
{
fprintf(fp,"%s\t%s\t%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->email,p->QQ,p->tel);
p=p->next;
}
fclose(fp);
return 0;
}
}

int maintain(void)
{
char ch;
int success,saveFlag,maintainR=4;

success=verificationIdentity();//用户权限校验

if(success==0)
{
printf("您是无权用户!!!");
maintainR=5;//maintainR=5:无权维护
}
else
{
do
{
printf("\t\t************* 维护 *************\n");
printf("\t\t* 1.增加 *\n");
printf("\t\t* 2.删除 *\n");
printf("\t\t* 3.修改 *\n");
printf("\t\t* 0.退出 *\n");
printf("*请输入选择(1/2/3/0):\n");
ch=getch();
switch(ch)
{
case'1':maintainR=add();//maintainR=1:增加学生信息
break;
case'2':maintainR=deleteStu();//maintainR=2:删除学生信息
break;
case'3':maintainR=repair();//maintainR=3:修改学生信息
break;
case'0':maintainR=0;//maintainR=0:
break;
default:printf("\n输入错误,请重新输入您的选择:");
break;
}
}
while(maintainR!=0);
printf("\n您已经完成了对学生信息的维护,\n");
printf("请您确认是否永久性保存您所做的修改(y/n):\n");
ch=getch();
if(tolower(ch)=='y')
{
saveFlag=save();
if(saveFlag)
maintainR=4;///maintainR=4:成功保存
}
}
return(maintainR);
}

int findaddrapart(void)
{
return 0;
}

int findname(void)
{
char sname[20];
struct student*p;
int flag;

flag=2;//don't find
p=head;
printf("\n请输入您想要查找学生的姓名:\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->email);
printf("%s\n",p->QQ);
printf("%s\n",p->tel);
flag=1;//finded
}
p=p->next;

}
return(flag);
}

int findnumber()
{
char sno[10];
struct student*p;
int flag;

flag=2;//don't find
p=head;
printf("\n请输入您想要查找的学生的学号[01000000-01004000]\n");
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->email);
printf("%s\n",p->QQ);
printf("%s\n",p->tel);
flag=1;//finded
}
p=p->next;

}
return(flag);
}

int find(void)
{
char ch;
int flag;

flag=4;
while(flag)
{
printf("\t\t***************** 查询 *****************\n");
printf("\t\t* 1.学号 *\n");
printf("\t\t* 2.姓名 *\n");
printf("\t\t* 3.住址/系别 *\n");
printf("\t\t* 0.退出 *\n");
printf("*请输入选择(1/2/3/0):\n");

ch=getch();
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");
printf("是否继续查找?[y/n]\n");
ch=getch();
if(tolower(ch)=='y')
continue;
else flag=0;
}
}
return flag;
}

//the InitStuInfo() function performs the initilization of student information link

int InitStuInfo(void)
{
FILE*fp;
struct student*p1,*p2;
fp=fopen("FILE.DAT","r");
if(fp==NULL)
{
printf("未能初始化学生信息\n");
//fclose(fp);
return 0;
}
else
{
p1=(struct student*)malloc(LEN);
head=p1;
while(!feof(fp))
{
fscanf(fp,"%s\t%s\t%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->email,p1->QQ,p1->tel);
p2=p1;
p1=(struct student*)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%s\t%s\t\n",
p1->No,p1->name,p1->age,p1->sex,p1->className,p1->address,
p1->email,p1->QQ,p1->tel);
p1=p1->next;
}
printf("________________________________________________________________________________");
printf("以上为初始化的文件信息");
getch();
system("cls");
fclose(fp);
return 1;
}

}

 

  评论这张
 
阅读(848)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018