学生管理系统源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct teacher)
struct admin
{
char name[20];
char pw[20];
}admin1,admin2;
struct teacher
{
int id;
int age;
struct teacher *next;
};
//管理员注册函数
int zhuce()
{
FILE *fp;
printf("\t\t请注册管理员\n");
printf("请输入您的注册账户:\n");
scanf("%s",admin1.name);
printf("请输入您的注册密码: \n");
system("stty-echo");
scanf("%s",admin1.pw);
system("sttyecho");
if((fp=fopen("fileguanli.txt","wb"))==NULL)
{
printf("da kai cuowu");
}
if(fwrite(&admin1,sizeof(structadmin),1,fp ) !=1 )
printf("xie ru cuowu\n");
fclose(fp);
return 0;
}
//管理员读取登录函数
int duqu()
{ int i;
FILE *fp;
char name2[20];
char pw2[20];
int ret1=0;
int ret2=0;
int result=0;
if((fp=fopen("fileguanli.txt","rb"))==NULL)
{
printf("请先注册管理员!\n");
}
if(fread(&admin2,sizeof(structadmin),1,fp)!=1)
{
printf("du qu cuo wu\n");
}
for(i=0;i<3;i++)
{
printf("请输入管理员名称:");
scanf("%s",name2);
printf("请输入管理员密码:");
system("stty-echo");
scanf("%s",pw2);
system("stty echo");
ret1 =strcmp(name2,admin2.name);
ret2 =strcmp(pw2,admin2.pw);
if((ret1==0) &&(ret2==0))
{
result = 1;
printf("登录成功\n");
zhujiemian();
break;
}
else
{
result = 0;
printf("帐号或密码错误,请重新输入\n");
}
}
if(i==3)
{
printf("输入次数超过3次,程序退出\n");
exit(0);
}
fclose(fp);
return 0;
}
//管理员操作函数
int admin_operate()
{ void search(struct teacher*head);
struct teacher *creat(int n);
struct teacher *xiugai(structteacher *head);
void cunpan( struct teacher*head);
struct teacher*duquteacher(void);
void xianshi(void);
void duquxianshi();
struct teacher *head;
struct teacher *delete(struct teacher*head,int id);
void print(structteacher *head);
int select = 0;
int n;
while(1)
{
printf("\t\t1:添加老师信息\t\t2:删除老师信息\n\t\t3:修改老师信息\t\t
4:查询老师信息\n\t\t5:显示文件信息\t\t6:保存教师信息\n\t\t7:显示当前信息\t\t8:管理员退出\n");
printf("请选择操作选项:");
scanf("%d",&select);
switch(select)
{
case 1:
printf("请输入添加教师信息的数量:\n");
scanf("%d",&n);
struct teacher*head;
head=creat(n);
break;
case 2:
printf("删除教师信息\n");
struct teacher
{
int id;
int age;
struct teacher*next;
};
int id;
printf("请输入要删除的教师id\n");
scanf("%d",&id);
head=delete(head,id);
break;
case 3:
head=xiugai(head);
printf("修改教师信息\n");
break;
case 4:
search(head);
printf("查找教师信息\n");
break;
case 5:
printf("显示教师信息\n");
duquxianshi();
break;
case 6:
cunpan(head);
printf("保存成功\n");
break;
case 7:
print(head);
break;
case 8:
printf("返回主菜单\n");
return 8;
default:
break;
printf("modifystudent\n");
break;
case 9:
printf("searchstudent\n");
break;
case 10:
break;
}//switch
}//while
}
//主界面函数
int zhujiemian()
{
int select = 0;
int login_retval = 0;
int operate_retval = 0;
system("clear");
while(1)
{ printf("\n");
printf("\n");
printf("\n");
printf("\t\t***********欢迎使用学生管理系统***********\n");
printf("\t\t||\t\t1:管理员操作\t\t||\n\t\t||\t\t
2:教师操作\t\t||\n\t\t||\t\t3:学生操作\t\t||\n\t\t||\t\t4:退出\t\t\t||\n");
printf("\t\t******************************************\n");
// system("clear");
printf("\t\t请选择操作选项:");
scanf("%d",&select);
switch(select)
{
case 1:
operate_retval =admin_operate();
break;
case 2:
printf("teacher\n");
break;
case 3:
printf("student\n");
break;
case 4:
printf("系统已经成功退出,谢谢使用!\n");
exit(0);
break;
default:
break;
}//switch
}//while
return 0;
}
// 创建教师链表
struct teacher *creat(int n)
{
int i;
struct teacher *head,*p1,*p2;
head=NULL;
head=p2=(struct teacher * )malloc(LEN);
printf("请输入编号,年龄(按回车键结束输入)\n");
scanf("%d,%d",&p2->id,&p2->age);
for(i=2;i<=n;i++)
{
p1=(struct teacher * )malloc(LEN);
printf("请输入编号,年龄(按回车结束输入)\n");
scanf("%d,%d",&p1->id,&p1->age);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return(head);
}
//存盘函数
void cunpan( struct teacher *head)
{
FILE *fp;
struct teacher *p;
if((fp=fopen("fileteacher","wb"))==NULL)
{
printf("bu neng da kai wen jian \n");
}
p=head;
while(p!=NULL)
{
if(fwrite(p,LEN,1,fp)!=1)
{
printf("xie ru chu cu\n ");
return;
}
p=p->next;
}
fclose(fp);
}
//打印链表
void print(struct teacher *head)
{
struct teacher *p;
p=head;
printf("\t\t\t\t编号 年龄\n");
while(p!=NULL)
{
printf("\t\t\t\t%d %d\n",p->id,p->age);
p=p->next;
}
}
// 查找函数
void search(struct teacher *head)
{
int id=0;
struct teacher *p=NULL;
struct teacher *q=NULL;
q=p=head;
printf("\t\t\t请输入需要查询的教师ID:");
scanf("%d",&id);
while(p!=NULL)
{
if(p->id==id)
{
printf("\t\t\t编号 年龄\n");
printf("\t\t\t%d %d\n",p->id,p->age);
break;
}
else
{
p=p->next;
}
}
if(p==NULL)
{
printf("\t\t\t\t\t\t\t\t该ID不存在!\n");
}
}
//修改函数
struct teacher *xiugai(struct teacher *head)
{
int select=0;
int age;
struct teacher *p=NULL;
int id=0;
char judge=NULL;
int flag=0;
p=head;
if(head==NULL)
{
printf("\t教师链表为空\n");
return head;
}
p=head;
while(1)
{
printf("\t请输入修改的教师ID:");
scanf("%d",&id);
while(p!=NULL)
{
if(p->id==id)
{
break;
}
p=p->next;
}
if(p==NULL)
{
printf("\t没有这个老师");
}
else
{
while(1)
{
printf("\t编号\t\t年龄\n");
printf("\t\t%d\t%d\n",p->id,p->age);
printf("\t1:编号 2:年龄 3:退出\n");
printf("\t请选择修改的内容");
scanf("%d",&select);
switch(select)
{
case 1:
printf("\t请输入新的编号:");
scanf("%d",&p->id);
break;
case 2:
printf("\t请输入新的年龄:");
scanf("%d",&p->age);
break;
case 3:
flag=1;
break;
default:
break;
}
if(flag)
{
break;
}
printf("\t继续修改(y),退出(n):");
while(getchar()!='\n');
scanf("%c",&judge);
if(judge == 'n')
{
break;
}
else
{
continue;
}
}//while
}
printf("\t是否继续修改新的教师信息(y),退出(n):");
while(getchar()!='\n');
scanf("%c",&judge);
if(judge == 'n')
{
break;
}
else
{
continue;
}
}//while
return head;
}
//读取文件里的 教师信息 并且显示
void duquxianshi()
{
struct teacher *head;
struct teacher *s;
struct teacher *p;
s=NULL;
p=NULL;
FILE *fp;
if ((fp = fopen ("fileteacher","r+")) == NULL)
{
printf ("\t\t\t\t打开教师文件失败!\n");
}
printf("\t\t\t\t正在读取文件...\n");
s=malloc (LEN);
fread (s, LEN, 1, fp);
if (s == NULL)
{
printf ("\t\t\t\t教师文件为空!\n");
head = NULL;
}
head = p = s;
s=s->next;
printf("编号 年龄\n");
printf("%d %d\n",head->id,head->age);
while (!feof (fp))
{
s = malloc (LEN);
if (fread (s,LEN, 1, fp) !=1)
{
free (s);
break;
}
printf("%d %d\n",s->id,s->age);
p->next = s;
p->next = malloc (LEN);
p = s;
}
p->next = NULL;
fclose (fp);
printf("\t\t\t\t已读取教师文件!\n");
}
//删除教师信息
struct teacher *delete(struct teacher *head,int id)
{ int n;
struct teacher *p1,*p2;
if(head==NULL)
{
printf("list isnull\n");
return head;
}
p1=head;
while(id!=p1->id&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(id==p1->id)
{
if(p1==head)
{head==p1->next; }
else
p2->next=p1->next;
printf("请输入要删除的编号:%d\n",id);
n=n-1;
}
else printf("%d zhao budao\n",id);
printf("删除成功\n");
return (head);
}
//主函数
int main()
{
int a;
int b;
int select;
system("clear");
printf("\n\n\n\n\n\n\n\n\n");
while(1)
{ printf("\t\t*********************************************\n");
printf("\t\t1.注册管理员 2.管理员登录 3. 退出程序 \n");
printf("\t\t*********************************************\n");
printf("\t\t请选择操作选项:");
scanf("%d",&select);
switch(select)
{
case 1:zhuce();
printf("注册成功!\n");
break;
case 2:duqu();
break;
case 3:
default :
break;
}
}
return 0;
}