学生管理系统源代码
来源:互联网 发布:获取端口号 编辑:程序博客网 时间:2024/05/16 16:18
/*
* xjgl.h
*
* Created on: 2014-12-5
* Author: yao
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
//#include"stu.c"
//#include"tea.c"
//学生结构体
typedef struct student
{
int id;
struct stuname
{
int passwd;
char class[20];
char name[20];
char sex;
int age;
}stuna;
float math;
float c;
float yuwen;
float ave;
struct student *next;
}students;
typedef struct teacher{ //教师结构体
int tid;
int tpasswd;
char tsex;
int tage;
char tname[20];
struct teacher *next;
}teachers;
students *listtofile_stu(students *phead);
students *filetolist_stu();
teachers *listtofile_tea(teachers *phead);
teachers *filetolist_tea();
struct student *create();
void serch_xh(students *phead);
void serch_xm(struct student *phead);
void chazhao_stu(struct student *phead);
struct student *add_stu(students *phead);
struct student *change_stu(students *phead);
void xianshi_stu(students *phead);
void del_stuxh(students *phead);
void del_stuxm(students *phead);
void del_stubj(students *phead);
void del_stu(students *phead);
void xs_stu_xh( students *phead );
void xs_stu_mc( students *phead );
void xs_stu_cj( students *phead );
struct teacher *tcreate();
struct teacher *add_tea(teachers *thead);
struct teacher *del_tea(teachers *thead);
void del_tea_gh(teachers *thead);
void del_teaxm(teachers *thead);
struct teacher *change_tea(teachers *thead);
void tprintall( teachers *head );
struct teacher *xianshi_tea(teachers *thead);
void xs_tea_gh( teachers *thead );
void manager(teachers *tphead,students *phead);
void caozuo_stu(students *phead);
void caozuo_tea(teachers *phead);
void print( students *head );
void tprint( teachers *head );
void chazhao_tea(teachers *thead);
void serch_gh(teachers *thead);
void serch_txm( teachers *thead);
teachers *teacher(teachers *tphead,students *phead);
void tea_change(teachers *phead);
void tea_change_tea(teachers *phead);
void tea_change_stu(students *phead);
void tea_changestu(students *phead);
students *student(students *phead);
void stu_change(students *phead);
========================================================
/*
*
*stu.c
* Created on: 2014-12-5
* Author: yaoshenjie
*/
#include"xjgl.h"
students *listtofile_stu(students *phead)
{
FILE *fp;
students *tmp;
if((fp=fopen("student","wb"))==NULL) /*打开文件*/
{ printf("cannot open file\n");
return 0;
}
for(tmp = phead;tmp != NULL;tmp = tmp->next) /*遍历链表*/
{
fwrite(tmp,sizeof(students),1,fp); /*把数据写入文件*/
}
fclose(fp);
return phead;
}
//从文件读入链表
students *filetolist_stu(){
FILE *fp=NULL;
students *p,*p1;
students *head;
head = NULL;
if((fp = fopen("student","rb"))==NULL)
{
printf("cannot open flie\n");
return 0;
}
char c;
c=fgetc(fp);
if(c==EOF){return NULL;}
else{rewind(fp);}
p=malloc(sizeof(students));
fread(p,sizeof(students),1,fp);
while(!feof(fp))
{
// p = malloc(sizeof(students));
// fread(p,sizeof(students),1,fp);
if(head==NULL) {
head=p;
p->next=NULL;
}
else{
p1=head;
while(p1->next!=NULL){ //求得尾指针p1
p1=p1->next;
}
p1->next = p;
p->next = NULL;
p = malloc(sizeof(students));
fread(p,sizeof(students),1,fp);
}
}
free(p);
fclose(fp);
return head;
}
//添加学生
struct student *add_stu(students *phead)
{
FILE *fp=NULL;
students *p;
students *s,*r;
p=phead;
int nid,flag=0;
int flag2=1;
/*while(p->next!=NULL){ //求得尾指针
p=p->next;
}
r=p;
p=phead;*/
fp=fopen("student","wb");
while(flag==0) //控制是否继续添加
{
p=phead;
printf("输入你要添加学生的学号\n");
scanf("%d",&nid);
while(p!=NULL){ //是否存在重学号
if(nid==p->id){
printf("用户已存在,重新输入学号\n");flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}
if(flag2==1){
int nid,npasswd,nage;
char nsex,nclass[20], nam[20];
float ma,cyuy,yw;
getchar();
fflush(stdin);
printf("请输入学生的学号,姓名,密码,性别,年龄,班级,"
"数学成绩,c语言成绩,语文成绩\n");
scanf("%d",&nid);
while(getchar()!='\n');
gets(nam);
scanf("%d",&npasswd);
while(getchar()!='\n');
nsex=getchar();
scanf("%d",&nage);
while(getchar()!='\n');
gets(nclass);
scanf("%f",&ma);
scanf("%f",&cyuy);
scanf("%f",&yw);
s=malloc(sizeof(students)); //动态创建内存
s->id=nid;
s->stuna.passwd=npasswd;
s->stuna.sex=nsex;
s->stuna.age=nage;
strcpy(s->stuna.class,nclass);
strcpy(s->stuna.name,nam);
s->math=ma;
s->c=cyuy;s->yuwen=yw;
// fwrite(s,sizeof(students),1,fp);
// s=m;
if(phead==NULL)
{
phead=s;
phead->next=NULL;
}
else
{
r=phead;
while(r->next!=NULL){ //求得尾指针
r=r->next;
}
r->next=s;
s->next=NULL;
}
// printf("是否保存信息y/n\n");
// if(getchar()=='y'||getchar()=='Y'){listtofile_stu(r);}
}
printf("是否继续插入学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
listtofile_stu(s);
fclose(fp);
// stu_listtofile(phead->next,"student");
return phead;
}
//修改学生信息
students *change_stu(students *phead){
students *p;
students *r;
// FILE *fp=NULL;
// fp=fopen("student","wb");
int nid;
int flag=0;
int flag2=0;
while(flag==0){
printf("输入要修改学生学号\n");
scanf("%d",&nid);
//while(getchar()!='\n');
p = phead;
while(p!=NULL){ //是否存在此学生
// fread(p,sizeof(students),1,fp);
if(nid==p->id){
flag2=0;
break;
}else{
flag2=1; //不存在此学生
}
p=p->next;
}r=p; p=phead;
if(flag2==1){
printf("此学生不存在\n");
}
else{
int num;
int npasswd=0,nage=0;
char nsex,nclass[20],nam[20];
float ma=0,cyuy=0,yw=0;
printf("输入要修改学生的信息1.学号2.姓名,3.密码,4.性别,5.年龄,6.班级"
"7.数学成绩,8.c成绩,9.语文成绩\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的学号\n");
scanf("%d",&nid);
r->id=nid;//free(r);
break;
case 2:printf("输入新的姓名\n");
scanf("%s",nam);
strcpy(r->stuna.name,nam);
break;
case 3:printf("输入新的密码\n");
scanf("%d",&npasswd);r->stuna.passwd=npasswd;
break;
case 4:printf("输入新的性别\n");
while(getchar()!='\n');
nsex=getchar();r->stuna.sex=nsex;
break;
case 5:printf("输入新的年龄\n");
scanf("%d",&nage);r->stuna.age=nage;
break;
case 6:printf("输入新的班级名\n");
scanf("%s",nclass);
strcpy(r->stuna.class,nclass);//free(r);
break;
case 7:printf("输入新的数学成绩\n");
scanf("%f",&ma);
r->math=ma;//free(r);
break;
case 8:printf("输入新的c语言成绩\n");
scanf("%f",&cyuy);
r->c=cyuy;//free(r);
break;
case 9:printf("输入新的语文成绩\n");
scanf("%f",&yw);
r->yuwen=yw;//free(r);
break;
default :printf("不做修改\n");break;
}
// fwrite(r,sizeof(students),1,fp);
//free(r);
// r=NULL;
} // getchar();
// getchar();
// fflush(stdin);
// listtofile_stu(r);
printf("修改成功\n");
printf("是否继续修改学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}else{
flag=0;
}
}
//fclose(fp);
return phead;
}
//删除学生
void del_stu(students *phead){
students *p;
//students *r=NULL;
int num;
p=phead;
//FILE *fp=NULL;
//fp=fopen("student","wb");
//char nname[20],nclass[20];
int flag=0;
while(flag==0){
p=phead;
printf("输入要删除学生学号或姓名或班级名\n1.按学号删除\t2.按姓名删除\t3.按班级删除\n");
scanf("%d",&num);
switch(num){
case 1:
del_stuxh(p);break;
case 2:
del_stuxm(p);break;
case 3:
del_stubj(p);break;
default :
printf("不删除学生\n");break;
}
printf("是否继续删除学生y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}else{flag=0;}
}
// return phead;
// fclose(fp);
}
//按学号删除学生
void del_stuxh(students *phead){
int flag2,nid;
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的学号\n");
scanf("%d",&nid);
while(p!=NULL){ //是否存在此学生
if(nid==p->id){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//按姓名删除学生
void del_stuxm(students *phead){
int flag2;
char nname[20];
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的姓名\n");
gets(nname);
while(p!=NULL){ //是否存在此学生
if(strcmp(p->stuna.name,nname)==0){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//按班级删除学生
void del_stubj(students *phead){
int flag2;
char nclass[20];
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的姓名\n");
gets(nclass);
while(p!=NULL){ //是否存在此学生
if(strcmp(p->stuna.name,nclass)==0){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//查询学生信息
//按学号查询
void serch_xh(students *phead)
{
int nid;
int flag=1;
students *p;
p=phead;
printf("输入你要查找学生的学号\n");
scanf("%d",&nid);
while(p!=NULL)
{
if(p->id!=nid){
flag=0;
}else{
//fread(p,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//按姓名查询
void serch_xm( students *phead)
{
char nname[20];
int flag=1;
students * p;
p=phead;
printf("输入你要查找学生的姓名\n");
while(getchar()!='\n');
gets(nname);
while(p!=NULL)
{
if(strcmp(p->stuna.name,nname)!=0){
flag=0;
}else
{
// fread(p,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//查询学生
void chazhao_stu( students *phead)
{
//int flag=1;
int num;
while(1)
{
printf("查询学生\n1.按学号\t2.按姓名\n");
scanf("%d",&num);
switch(num){
case 1:serch_xh(phead);break;
case 2:serch_xm(phead);break;
//case 3:serch_cj(phead);break;
default:printf("输入错误\n");break;
}
//getchar();
printf("是否继续查询y/n\n");
while(getchar()!='\n');
if((getchar()=='n')||(getchar()=='N')){
break;
}
//else{flag=1;}
}
}
//显示全部学生
void xianshi_stu(students *phead)
{
students *p;
p=phead;
int num;
while(1){
printf("显示学生信息\n1.按学号排序\t\n2.按名次排序\t\n3.按成绩排序\t\n");
scanf("%d",&num);
switch(num){
case 1:xs_stu_xh(p);//printall(phead);
break;
case 2:xs_stu_mc(p);//printall(phead);
break;
case 3:xs_stu_cj(p);//printall(phead);
break;
default :printf("此次不显示了\n");break;
}
printf("是否继续显示学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
}
// 按学号排序
void xs_stu_xh( students *phead )
{
students *p,*q, *p_min, *tail,*first,*min;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=phead;
while(q!=NULL){
for(p=q,min=q;p->next!=NULL;p=p->next){
if(p->next->id<min->id){
p_min=p;
min=p->next;
}
}//结束for循环
if(first==NULL){
first=min;
tail=min;
}
else{
tail->next=min;
tail=min;
}
if(min==q){
q=q->next;
}
else{
p_min->next=min->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}
}
//按名次排序
void xs_stu_mc( students *phead )
{
students *p,*q, *p_max, *tail,*first,*max;
//tail = NULL;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if( p-> ave> p->next->ave ){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}
}
//按成绩排序
void xs_stu_cj( students *phead )
{
students *p,*q, *p_max, *tail,*first,*max;
//tail = NULL;
first=p=NULL;
int num;
printf("输入按成绩排序1.c语言成绩\t\n2.数学成绩\t\n3.语文成绩\n");
scanf("%d",&num);
switch(num)
{
case 1: //c成绩排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->c>max->c){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}break;
case 2: //数学成绩排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->math>max->math){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
}break;
case 3:
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->yuwen>max->yuwen){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
}break;
default :printf("不查询了\n");break;
}
}
//输出学生信息显示函数
void print( students *head )
{
// fread(head,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",head->id,head->stuna.name,head->stuna.passwd,head->stuna.sex,
head->stuna.age,head->stuna.class,head->math,head->c,head->yuwen);
// head = head->next;
}
===============================================================================
/*
* tea.c
*
* Created on: 2014-12-5
* Author: yao
*/
#include"xjgl.h"
#include<stdio.h>
//教师链表保存到文件
teachers *listtofile_tea(teachers *phead)
{
FILE *fp;
teachers *tmp;
if((fp=fopen("teacher","wb"))==NULL) /*打开文件*/
{ printf("cannot open file\n");
return 0;
}
for(tmp = phead;tmp != NULL;tmp = tmp->next) /*遍历链表*/
{
fwrite(tmp,sizeof(teachers),1,fp); /*把数据写入文件*/
}
fclose(fp);
return phead;
}
//从文件读入链表
teachers *filetolist_tea(){
FILE *fp=NULL;
teachers *p,*p1;
teachers *head=NULL;
// head = (teachers *)malloc(sizeof(teachers));
if((fp = fopen("teacher","rb"))==NULL)
{
printf("cannot open flie\n");
return 0;
}
char c;
c=fgetc(fp);
if(c==EOF){return NULL;}
else{rewind(fp);}
p=malloc(sizeof(teachers));
fread(p,sizeof(teachers),1,fp);
while(!feof(fp))
{
if(head==NULL) {
head=p;
p->next=NULL;
}
else{
p1=head;
while(p1->next!=NULL){ //求得尾指针p1
p1=p1->next;
}
p1->next = p;
p->next = NULL;
p = malloc(sizeof(teachers));
fread(p,sizeof(teachers),1,fp);
}
}
free(p);
fclose(fp);
return head;
}
//添加老师
teachers *add_tea(teachers *thead)
{
teachers *p;
teachers *s,*r;
p=thead;
int ntid,flag=0;
int flag2=1;
FILE *fp=NULL;
fp=fopen("teacher","wb");
/* while(p->next!=NULL){ //求得尾指针
p=p->next;
}
r=p;
p=thead;*/
while(flag==0)
{ //控制是否继续添加
printf("输入你要添加老师的工号\n");
scanf("%d",&ntid);
while(p!=NULL){ //是否存在重工号
if(ntid==p->tid){
printf("用户已存在,重新输入工号\n");flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}
if(flag2==1){
char ntnam[20];
int ntpasswd,ntage;
char ntsex;
// getchar();
// fflush(stdin);
printf("请插入老师的工号,姓名,密码,性别,年龄\n");
scanf("%d",&ntid);
while(getchar()!='\n');
gets(ntnam);
scanf("%d",&ntpasswd);
while(getchar()!='\n');
ntsex=getchar();
scanf("%d",&ntage);
//scanf("%d%s%d%c%d",&ntid,ntnam,&ntpasswd,&ntsex,&ntage);
s=malloc(sizeof(teachers));
s->tid=ntid;
strcpy(s->tname,ntnam);
s->tpasswd=ntpasswd;
s->tage=ntage;
s->tsex=ntsex;
//fp=fopen("teacher","wb");
// fwrite(s,sizeof(teachers),1,fp);
if(thead==NULL)
{
thead=s;
thead->next=NULL;
}
else
{
r=thead;
while(r->next!=NULL){ //求得尾指针
r=r->next;
}
r->next=s;
s->next=NULL;
}
}
printf("是否继续添加老师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
listtofile_tea(s);
fclose(fp);
return thead;
}
//修改教师信息
teachers *change_tea(teachers *thead){
teachers *p;
teachers *r;
int ntid;
//int flag=0;
int flag2=0;
while(1){
printf("输入要修改教师工号\n");
scanf("%d",&ntid);
while(getchar()!='\n');
p = thead;
while(p!=NULL){ //是否存在此教师
if(ntid==p->tid){
flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}r=p; p=thead;
if(flag2==1){
printf("此教师不存在\n");
}
else{
int num;
int ntpasswd=0,ntage=0;
char ntsex,ntnam[20];
printf("输入要修改教师的信息1.工号\t2.姓名\t3.密码\t4.性别\t5.年龄\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的工号\n");
scanf("%d",&ntid);
r->tid=ntid;//free(r);
break;
case 2:printf("输入新的姓名\n");
scanf("%s",ntnam);
strcpy(r->tname,ntnam);//free(r);
break;
case 3:printf("输入新的密码\n");
scanf("%d",&ntpasswd);r->tpasswd=ntpasswd;//free(r);
break;
case 4:printf("输入新的性别\n");
scanf("%c",&ntsex);r->tsex=ntsex;//free(r);
break;
case 5:printf("输入新的年龄\n");
scanf("%d",&ntage);r->tage=ntage;//free(r);
break;
default :printf("不做修改\n");break;
}
}
printf("是否继续修改教师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
return thead;
}
//删除老师
teachers *del_tea(teachers *thead){
teachers *p;
//students *r=NULL;
int num;
p=thead;
//char nname[20],nclass[20];
int flag=0;
while(flag==0){
printf("输入要删除老师的工号或姓名\n1.按工号删除\t2.按姓名删除\t\n");
scanf("%d",&num);
switch(num){
case 1:
del_tea_gh(p);break; //按工号删除
case 2:
del_teaxm(p);break; //按姓名删除
default :
printf("不删除老师\n");break;
}
printf("是否继续删除教师y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
return thead;
}
//按工号删除教师
void del_tea_gh(teachers *thead){
int flag2,ntid;
teachers *p;
teachers *r;
teachers *q;
p=thead;
q=thead;
printf("输入你要删除教师的工号\n");
scanf("%d",&ntid);
while(p!=NULL){ //是否存在此教师
if(ntid==p->tid){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此教师不存在\n");
}else{
printf("确定删除此教师y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==thead)
{
thead=thead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此教师\n");
}
}
}
//按姓名删除教师
void del_teaxm(teachers *thead)
{
int flag2;
char ntname[20];
teachers *p;
teachers *r;
teachers *q;
p=thead;
q=thead;
printf("输入你要删除教师的姓名\n");
scanf("%s",ntname);
while(p!=NULL)
{ //是否存在此教师
if(strcmp(p->tname,ntname)==0)
{
flag2=0;
r=p;
// p=phead;
break;
}
else
{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1)
{
printf("此教师不存在\n");
}
else
{
printf("确定删除此教师y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y')
{
if(r==thead)
{
thead=thead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}
else{
printf("不删除此教师\n");
}
}
}
//按工号查询
void serch_gh(teachers *thead)
{
int ntid;
int flag=1;
teachers *p;
p=thead;
printf("输入你要查找教师的工号\n");
scanf("%d",&ntid);
while(p!=NULL)
{
if(p->tid!=ntid){
flag=0;
}else{
//fread(p,sizeof(students),1,fp);
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex, p->tage);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//按姓名查询
void serch_txm( teachers *thead)
{
char ntname[20];
int flag=1;
teachers * p;
p=thead;
printf("输入你要查找教师的姓名\n");
while(getchar()!='\n');
gets(ntname);
while(p!=NULL)
{
if(strcmp(p->tname,ntname)!=0){
flag=0;
}else
{
// fread(p,sizeof(students),1,fp);
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex,p->tage);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//查询教师
void chazhao_tea(teachers *thead)
{
//int flag=1;
int num;
while(1)
{
printf("查询教师\n1.按工号\t2.按姓名\n");
scanf("%d",&num);
switch(num){
case 1:serch_gh(thead);break;
case 2:serch_txm(thead);break;
//case 3:serch_cj(phead);break;
default:printf("输入错误\n");break;
}
//getchar();
printf("是否继续查询y/n\n");
while(getchar()!='\n');
if((getchar()=='n')||(getchar()=='N')){
break;
}
//else{flag=1;}
}
}
//显示全部教师信息
teachers *xianshi_tea(teachers *thead)
{
int flag=0;
while(flag==0){
printf("显示教师信息\n");
xs_tea_gh(thead);
//tprintall(thead);
printf("是否继续显示教师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
return thead;
}
// 按工号排序
void xs_tea_gh( teachers *thead )
{
teachers *p,*q, *p_min, *tail,*first,*min;
//tail = NULL;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=thead;
while(q!=NULL){
for(p=q,min=q;p->next!=NULL;p=p->next){
if(p->next->tid<min->tid){
p_min=p;
min=p->next;
}
}//结束for循环
if(first==NULL){
first=min;
tail=min;
}
else{
tail->next=min;
tail=min;
}
if(min==q){
q=q->next;
}
else{
p_min->next=min->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("工号\t姓名\t密码\t性别\t年龄\n");
for(p=first;p!=NULL;p=p->next)
{
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex,p->tage);
}
}
//显示教师信息
void tprint( teachers *head )
{
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",head->tid,head->tname,head->tpasswd,head->tsex,
head->tage);
}
===================================================================================
/*
* main.c
*
* Created on: 2014-12-5
* Author: yao
*/
#include"xjgl.h"
//#include"tea.c"
//#include"stu.c"
//管理员操作
//void caozuo_stu(students *);
//void caozuo_tea(teachers *);
void manager(teachers *tphead,students *phead)
{
int ntid,ntpasswd;
int num;
int flag=0,flag2=0,flag3=0;
students *ps=NULL;
teachers *pt=NULL;
// ps=stu_filetolist("student");
// pt=tea_filetolist("teacher");
ps=phead;
pt=tphead;
printf("欢迎管理员\n");
while(flag==0)
{
printf("输入你的帐号和密码\n");
scanf("%d%d",&ntid,&ntpasswd);
//printf("输入你的帐号和密码\n");
//scanf("%d%d",&ntid,&ntpasswd);
if((123!=ntid)||(123!=ntpasswd))
{
flag=1;
}
else{
while(flag2==0)
{
ps=phead;
pt=tphead;
printf("1.操作学生信息\n2.操作教师信息\n0.返回\n");
scanf("%d",&num);
switch(num)
{
case 0:flag3=1;break;
case 1:caozuo_stu(ps);break; //操作学生信息
case 2:caozuo_tea(pt);break; //操作教师信息
default :printf("不做任何行为\n");break;
}
if(flag3==1){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag2=1;break;}
else{flag2=0;}
}
}
if(flag==1)
{
printf("密码错误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
else{flag=0;}
}
if(flag2==1)break;
if(flag3==1){break;}
}
}
//操作学生
void caozuo_stu(students *phead)
{
students *p=NULL;
//p=phead;
int num,flag=0,flag2=0;
while(flag==0){
p=phead;
printf("*************************\n");
printf("1.添加学生 \t2.删除学生\n3.修改学生信息\t4.查找学生\n5.显示全部学生\t0.返回\n");
printf("*************************\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=1;break;
case 1:add_stu(p);break;
case 2:del_stu(p);break;
case 3:change_stu(p);break;
case 4:chazhao_stu(p);break;
case 5:xianshi_stu(p);break;
default :printf("不操作学生信息\n");break;
}
if(flag2==1){break;}
printf("是否继续操作学生y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag=1;break;}
}
}
//操作教师
void caozuo_tea(teachers *phead)
{
teachers *p=NULL;
//p=phead;
int num,flag=1,flag2=0;
while(flag){
p=phead;
printf("***************\n");
printf("1.添加教师\n2.删除教师\n3.修改教师信息\n4.显示教师\n5.查找教师\n0.返回\n");
printf("***************\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=1;break;
case 1:add_tea(p);break;
case 2:del_tea(p);break;
case 3:change_tea(p);break;
case 4:xianshi_tea(p);break;
case 5:chazhao_tea(p);break;
default :printf("不操作教师\n");break;
}
if(flag2==1){break;}
printf("是否继续操作教师y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag=0;break;}
}
}
//教师登录操作
//显示教师信息
teachers *teacher(teachers *tphead,students *phead){
int ntid,ntpasswd;
int num;
int flag=0,flag2=1;
teachers *pt;
students *ps;
pt=tphead;
ps=phead;
while(1)
{ pt=tphead;
printf("输入你的工号和密码\n");
scanf("%d%d",&ntid,&ntpasswd);
while(pt!=NULL) //检测密码是否正确
{
//fread(pt,sizeof(teachers),1,fp);
if((pt->tid!=ntid)||(pt->tpasswd!=ntpasswd))
{
flag=1; //密码不正确
}
else{
flag=0;break; //密码正确
}
pt=pt->next;
}
if(flag==1)
{
printf("你输入的工号或密码有误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
//else{flag2=0;}
}
if(flag==0)
{
printf("欢迎%s老师\n",pt->tname);
while(1)
{
printf("1.查看或修改自己信息\t\n2.查看或修改学生信息\n0.返回主菜单\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=0;break;
case 1:tea_change(pt);break; //修改或查看自己信息
case 2:tea_change_stu(ps);break; //查看或修改学生信息
default :printf("不做任何行为\n");break;
}
if(flag2==0){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){break;}
}
if(flag2==0){break;}
//else{flag=0;}
}
}
return tphead;
}
//查看或修改自己信息
void tea_change(teachers *phead)
{
teachers *p=NULL;
p=phead;
int num;
printf("1.查看自己信息\t\n2.修改自己信息\n");
scanf("%d",&num);
switch(num)
{
case 1:tprint(p);break; //显示自己信息
case 2:tea_change_tea(p);tprint(p);break; //老师自己修改自己信息
default :printf("不做任何操作\n");break;
}
}
//老师修改自己信息
void tea_change_tea(teachers *phead)
{
int num;
int ntpasswd=0;
char tnam[20];
printf("输入要修改的信息1.姓名\t2.密码,0.返回\n");
scanf("%d",&num);
switch(num){
case 0:break;
case 1:printf("输入新的姓名\n");
scanf("%s",tnam);
strcpy(phead->tname,tnam);//free(r);
break;
case 2:printf("输入新的密码\n");
scanf("%d",&ntpasswd);phead->tpasswd=ntpasswd;//free(r);
break;
default :printf("不做修改\n");break;
}
}
//教师查看或修改学生信息
void tea_change_stu(students *phead)
{
students *p=NULL;
p=phead;
int num;
printf("\n1.查看所有学生信息\t\n2.修改学生成绩\t\n3.查找学生\t\n");
scanf("%d",&num);
switch(num)
{
case 1:xianshi_stu(p);break;
case 2:tea_changestu(p);print(p);break;
case 3:chazhao_stu(p);break;
default :printf("不做任何操作\n");break;
}
}
///老师修改学生成绩
void tea_changestu(students *phead)
{
students *p=NULL;
students *r=NULL;
int nid;
int flag=0;
int flag2=0;
while(flag==0){
printf("输入要修改学生学号\n");
scanf("%d",&nid);
while(getchar()!='\n');
p = phead;
while(p!=NULL){ //是否存在此学生
if(nid==p->id){
flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}r=p; p=phead;
if(flag2==1){
printf("此学生不存在\n");
}
else{
int num;
float ma=0,cyuy=0,yw=0;
printf("输入要修改学生的成绩1.数学成绩\t2..c成绩\t3.语文成绩\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的数学成绩\n");
scanf("%f",&ma);
r->math=ma;//free(r);
break;
case 2:printf("输入新的c语言成绩\n");
scanf("%f",&cyuy);
r->c=cyuy;//free(r);
break;
case 3:printf("输入新的语文成绩\n");
scanf("%f",&yw);
r->yuwen=yw;//free(r);
break;
default :printf("不做修改\n");break;
}
}
printf("是否继续修改学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}else{
flag=0;
}
}
}
//学生登录操作
students *student(students *phead){
int nid,npasswd;
int num;
students *p=NULL;
p=phead;
while(1)
{
p=phead;
int flag=1,flag2=1;;
printf("输入你的学号和密码\n");
scanf("%d%d",&nid,&npasswd);
while(p!=NULL)
{
if((p->id!=nid)||(p->stuna.passwd!=npasswd))
{
flag=0;
}
else{
flag=1;break;
}
p=p->next;
}
if(flag==0)
{
printf("你输入的学号或密码有误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
}
if(flag==1)
{
printf("欢迎%s同学\n\n",p->stuna.name);
while(1){
printf("1.查看自己信息\t\n2.修改自己部分信息\n0.返回登录\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=0;break;
case 1:print(p);break;
case 2:stu_change(p);print(p);break;
default :printf("不做任何行为\n");break;
}
if(flag2==0){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag2=0;break;}
// else{flag=0;}
}
}
if(flag2==0){break;}
}
return phead;
}
void stu_change(students *phead)
{
int num;
int npasswd=0;
char nclass[20],nam[20];
printf("输入要修改的信息1.姓名\t2.密码\t3.班级\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的姓名\n");
scanf("%s",nam);
strcpy(phead->stuna.name,nam);//free(r);
break;
case 2:printf("输入新的密码\n");
scanf("%d",&npasswd);phead->stuna.passwd=npasswd;//free(r);
break;
case 3:printf("输入新的班级名\n");
scanf("%s",nclass);
strcpy(phead->stuna.class,nclass);//free(r);
break;
default :printf("不做修改\n");break;
}
}
void menu(){
printf("\n\n******** 学籍管理系统***********\t\n");
printf("\n1.管理员登录\t2.教师登录\t\n");
printf("\n3.学生登录\t0.保存退出\t\n");
printf("*********************************\n");
}
int main()
{
int sel,flag=0;
students *ls=NULL;
teachers *lt=NULL;
ls=filetolist_stu();
lt=filetolist_tea();
while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);
switch(sel)
{
case 0:flag=1;break;
case 1:manager(lt,ls);break;
case 2:lt=teacher(lt,ls);break;
case 3:ls=student(ls);break;
default: printf("........\n");break;
}
if(flag==1){break;}
}
listtofile_stu(ls);
listtofile_tea(lt);
return 0;
}
* xjgl.h
*
* Created on: 2014-12-5
* Author: yao
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
//#include"stu.c"
//#include"tea.c"
//学生结构体
typedef struct student
{
int id;
struct stuname
{
int passwd;
char class[20];
char name[20];
char sex;
int age;
}stuna;
float math;
float c;
float yuwen;
float ave;
struct student *next;
}students;
typedef struct teacher{ //教师结构体
int tid;
int tpasswd;
char tsex;
int tage;
char tname[20];
struct teacher *next;
}teachers;
students *listtofile_stu(students *phead);
students *filetolist_stu();
teachers *listtofile_tea(teachers *phead);
teachers *filetolist_tea();
struct student *create();
void serch_xh(students *phead);
void serch_xm(struct student *phead);
void chazhao_stu(struct student *phead);
struct student *add_stu(students *phead);
struct student *change_stu(students *phead);
void xianshi_stu(students *phead);
void del_stuxh(students *phead);
void del_stuxm(students *phead);
void del_stubj(students *phead);
void del_stu(students *phead);
void xs_stu_xh( students *phead );
void xs_stu_mc( students *phead );
void xs_stu_cj( students *phead );
struct teacher *tcreate();
struct teacher *add_tea(teachers *thead);
struct teacher *del_tea(teachers *thead);
void del_tea_gh(teachers *thead);
void del_teaxm(teachers *thead);
struct teacher *change_tea(teachers *thead);
void tprintall( teachers *head );
struct teacher *xianshi_tea(teachers *thead);
void xs_tea_gh( teachers *thead );
void manager(teachers *tphead,students *phead);
void caozuo_stu(students *phead);
void caozuo_tea(teachers *phead);
void print( students *head );
void tprint( teachers *head );
void chazhao_tea(teachers *thead);
void serch_gh(teachers *thead);
void serch_txm( teachers *thead);
teachers *teacher(teachers *tphead,students *phead);
void tea_change(teachers *phead);
void tea_change_tea(teachers *phead);
void tea_change_stu(students *phead);
void tea_changestu(students *phead);
students *student(students *phead);
void stu_change(students *phead);
========================================================
/*
*
*stu.c
* Created on: 2014-12-5
* Author: yaoshenjie
*/
#include"xjgl.h"
students *listtofile_stu(students *phead)
{
FILE *fp;
students *tmp;
if((fp=fopen("student","wb"))==NULL) /*打开文件*/
{ printf("cannot open file\n");
return 0;
}
for(tmp = phead;tmp != NULL;tmp = tmp->next) /*遍历链表*/
{
fwrite(tmp,sizeof(students),1,fp); /*把数据写入文件*/
}
fclose(fp);
return phead;
}
//从文件读入链表
students *filetolist_stu(){
FILE *fp=NULL;
students *p,*p1;
students *head;
head = NULL;
if((fp = fopen("student","rb"))==NULL)
{
printf("cannot open flie\n");
return 0;
}
char c;
c=fgetc(fp);
if(c==EOF){return NULL;}
else{rewind(fp);}
p=malloc(sizeof(students));
fread(p,sizeof(students),1,fp);
while(!feof(fp))
{
// p = malloc(sizeof(students));
// fread(p,sizeof(students),1,fp);
if(head==NULL) {
head=p;
p->next=NULL;
}
else{
p1=head;
while(p1->next!=NULL){ //求得尾指针p1
p1=p1->next;
}
p1->next = p;
p->next = NULL;
p = malloc(sizeof(students));
fread(p,sizeof(students),1,fp);
}
}
free(p);
fclose(fp);
return head;
}
//添加学生
struct student *add_stu(students *phead)
{
FILE *fp=NULL;
students *p;
students *s,*r;
p=phead;
int nid,flag=0;
int flag2=1;
/*while(p->next!=NULL){ //求得尾指针
p=p->next;
}
r=p;
p=phead;*/
fp=fopen("student","wb");
while(flag==0) //控制是否继续添加
{
p=phead;
printf("输入你要添加学生的学号\n");
scanf("%d",&nid);
while(p!=NULL){ //是否存在重学号
if(nid==p->id){
printf("用户已存在,重新输入学号\n");flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}
if(flag2==1){
int nid,npasswd,nage;
char nsex,nclass[20], nam[20];
float ma,cyuy,yw;
getchar();
fflush(stdin);
printf("请输入学生的学号,姓名,密码,性别,年龄,班级,"
"数学成绩,c语言成绩,语文成绩\n");
scanf("%d",&nid);
while(getchar()!='\n');
gets(nam);
scanf("%d",&npasswd);
while(getchar()!='\n');
nsex=getchar();
scanf("%d",&nage);
while(getchar()!='\n');
gets(nclass);
scanf("%f",&ma);
scanf("%f",&cyuy);
scanf("%f",&yw);
s=malloc(sizeof(students)); //动态创建内存
s->id=nid;
s->stuna.passwd=npasswd;
s->stuna.sex=nsex;
s->stuna.age=nage;
strcpy(s->stuna.class,nclass);
strcpy(s->stuna.name,nam);
s->math=ma;
s->c=cyuy;s->yuwen=yw;
// fwrite(s,sizeof(students),1,fp);
// s=m;
if(phead==NULL)
{
phead=s;
phead->next=NULL;
}
else
{
r=phead;
while(r->next!=NULL){ //求得尾指针
r=r->next;
}
r->next=s;
s->next=NULL;
}
// printf("是否保存信息y/n\n");
// if(getchar()=='y'||getchar()=='Y'){listtofile_stu(r);}
}
printf("是否继续插入学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
listtofile_stu(s);
fclose(fp);
// stu_listtofile(phead->next,"student");
return phead;
}
//修改学生信息
students *change_stu(students *phead){
students *p;
students *r;
// FILE *fp=NULL;
// fp=fopen("student","wb");
int nid;
int flag=0;
int flag2=0;
while(flag==0){
printf("输入要修改学生学号\n");
scanf("%d",&nid);
//while(getchar()!='\n');
p = phead;
while(p!=NULL){ //是否存在此学生
// fread(p,sizeof(students),1,fp);
if(nid==p->id){
flag2=0;
break;
}else{
flag2=1; //不存在此学生
}
p=p->next;
}r=p; p=phead;
if(flag2==1){
printf("此学生不存在\n");
}
else{
int num;
int npasswd=0,nage=0;
char nsex,nclass[20],nam[20];
float ma=0,cyuy=0,yw=0;
printf("输入要修改学生的信息1.学号2.姓名,3.密码,4.性别,5.年龄,6.班级"
"7.数学成绩,8.c成绩,9.语文成绩\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的学号\n");
scanf("%d",&nid);
r->id=nid;//free(r);
break;
case 2:printf("输入新的姓名\n");
scanf("%s",nam);
strcpy(r->stuna.name,nam);
break;
case 3:printf("输入新的密码\n");
scanf("%d",&npasswd);r->stuna.passwd=npasswd;
break;
case 4:printf("输入新的性别\n");
while(getchar()!='\n');
nsex=getchar();r->stuna.sex=nsex;
break;
case 5:printf("输入新的年龄\n");
scanf("%d",&nage);r->stuna.age=nage;
break;
case 6:printf("输入新的班级名\n");
scanf("%s",nclass);
strcpy(r->stuna.class,nclass);//free(r);
break;
case 7:printf("输入新的数学成绩\n");
scanf("%f",&ma);
r->math=ma;//free(r);
break;
case 8:printf("输入新的c语言成绩\n");
scanf("%f",&cyuy);
r->c=cyuy;//free(r);
break;
case 9:printf("输入新的语文成绩\n");
scanf("%f",&yw);
r->yuwen=yw;//free(r);
break;
default :printf("不做修改\n");break;
}
// fwrite(r,sizeof(students),1,fp);
//free(r);
// r=NULL;
} // getchar();
// getchar();
// fflush(stdin);
// listtofile_stu(r);
printf("修改成功\n");
printf("是否继续修改学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}else{
flag=0;
}
}
//fclose(fp);
return phead;
}
//删除学生
void del_stu(students *phead){
students *p;
//students *r=NULL;
int num;
p=phead;
//FILE *fp=NULL;
//fp=fopen("student","wb");
//char nname[20],nclass[20];
int flag=0;
while(flag==0){
p=phead;
printf("输入要删除学生学号或姓名或班级名\n1.按学号删除\t2.按姓名删除\t3.按班级删除\n");
scanf("%d",&num);
switch(num){
case 1:
del_stuxh(p);break;
case 2:
del_stuxm(p);break;
case 3:
del_stubj(p);break;
default :
printf("不删除学生\n");break;
}
printf("是否继续删除学生y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}else{flag=0;}
}
// return phead;
// fclose(fp);
}
//按学号删除学生
void del_stuxh(students *phead){
int flag2,nid;
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的学号\n");
scanf("%d",&nid);
while(p!=NULL){ //是否存在此学生
if(nid==p->id){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//按姓名删除学生
void del_stuxm(students *phead){
int flag2;
char nname[20];
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的姓名\n");
gets(nname);
while(p!=NULL){ //是否存在此学生
if(strcmp(p->stuna.name,nname)==0){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//按班级删除学生
void del_stubj(students *phead){
int flag2;
char nclass[20];
students *p;
students *r;
students *q;
p=phead;
q=phead;
printf("输入你要删除学生的姓名\n");
gets(nclass);
while(p!=NULL){ //是否存在此学生
if(strcmp(p->stuna.name,nclass)==0){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此学生不存在\n");
}else{
printf("确定删除此学生y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==phead)
{
phead=phead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此学生\n");
}
}
}
//查询学生信息
//按学号查询
void serch_xh(students *phead)
{
int nid;
int flag=1;
students *p;
p=phead;
printf("输入你要查找学生的学号\n");
scanf("%d",&nid);
while(p!=NULL)
{
if(p->id!=nid){
flag=0;
}else{
//fread(p,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//按姓名查询
void serch_xm( students *phead)
{
char nname[20];
int flag=1;
students * p;
p=phead;
printf("输入你要查找学生的姓名\n");
while(getchar()!='\n');
gets(nname);
while(p!=NULL)
{
if(strcmp(p->stuna.name,nname)!=0){
flag=0;
}else
{
// fread(p,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//查询学生
void chazhao_stu( students *phead)
{
//int flag=1;
int num;
while(1)
{
printf("查询学生\n1.按学号\t2.按姓名\n");
scanf("%d",&num);
switch(num){
case 1:serch_xh(phead);break;
case 2:serch_xm(phead);break;
//case 3:serch_cj(phead);break;
default:printf("输入错误\n");break;
}
//getchar();
printf("是否继续查询y/n\n");
while(getchar()!='\n');
if((getchar()=='n')||(getchar()=='N')){
break;
}
//else{flag=1;}
}
}
//显示全部学生
void xianshi_stu(students *phead)
{
students *p;
p=phead;
int num;
while(1){
printf("显示学生信息\n1.按学号排序\t\n2.按名次排序\t\n3.按成绩排序\t\n");
scanf("%d",&num);
switch(num){
case 1:xs_stu_xh(p);//printall(phead);
break;
case 2:xs_stu_mc(p);//printall(phead);
break;
case 3:xs_stu_cj(p);//printall(phead);
break;
default :printf("此次不显示了\n");break;
}
printf("是否继续显示学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
}
// 按学号排序
void xs_stu_xh( students *phead )
{
students *p,*q, *p_min, *tail,*first,*min;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=phead;
while(q!=NULL){
for(p=q,min=q;p->next!=NULL;p=p->next){
if(p->next->id<min->id){
p_min=p;
min=p->next;
}
}//结束for循环
if(first==NULL){
first=min;
tail=min;
}
else{
tail->next=min;
tail=min;
}
if(min==q){
q=q->next;
}
else{
p_min->next=min->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}
}
//按名次排序
void xs_stu_mc( students *phead )
{
students *p,*q, *p_max, *tail,*first,*max;
//tail = NULL;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if( p-> ave> p->next->ave ){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}
}
//按成绩排序
void xs_stu_cj( students *phead )
{
students *p,*q, *p_max, *tail,*first,*max;
//tail = NULL;
first=p=NULL;
int num;
printf("输入按成绩排序1.c语言成绩\t\n2.数学成绩\t\n3.语文成绩\n");
scanf("%d",&num);
switch(num)
{
case 1: //c成绩排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->c>max->c){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
//p = head->next;
}break;
case 2: //数学成绩排序
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->math>max->math){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
}break;
case 3:
q=phead;
while(q!=NULL){
for(p=q,max=q;p->next!=NULL;p=p->next){
if(p->next->yuwen>max->yuwen){
p_max=p;
max=p->next;
}
}//结束for循环
if(first==NULL){
first=max;
tail=max;
}
else{
tail->next=max;
tail=max;
}
if(max==q){
q=q->next;
}
else{
p_max->next=max->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
for(p=first;p!=NULL;p=p->next)
{
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",p->id,p->stuna.name,p->stuna.passwd,p->stuna.sex,
p->stuna.age,p->stuna.class,p->math,p->c,p->yuwen);
}break;
default :printf("不查询了\n");break;
}
}
//输出学生信息显示函数
void print( students *head )
{
// fread(head,sizeof(students),1,fp);
printf("\t学号\t姓名\t密码\t性别\t年龄\t班级\t数学成绩\tc语言成绩\t语文成绩\t\n");
printf("\t%d\t\t%s\t\t%d\t\t%c\t\t%d\t\t%s\t%f\t%f\t%f\t\n",head->id,head->stuna.name,head->stuna.passwd,head->stuna.sex,
head->stuna.age,head->stuna.class,head->math,head->c,head->yuwen);
// head = head->next;
}
===============================================================================
/*
* tea.c
*
* Created on: 2014-12-5
* Author: yao
*/
#include"xjgl.h"
#include<stdio.h>
//教师链表保存到文件
teachers *listtofile_tea(teachers *phead)
{
FILE *fp;
teachers *tmp;
if((fp=fopen("teacher","wb"))==NULL) /*打开文件*/
{ printf("cannot open file\n");
return 0;
}
for(tmp = phead;tmp != NULL;tmp = tmp->next) /*遍历链表*/
{
fwrite(tmp,sizeof(teachers),1,fp); /*把数据写入文件*/
}
fclose(fp);
return phead;
}
//从文件读入链表
teachers *filetolist_tea(){
FILE *fp=NULL;
teachers *p,*p1;
teachers *head=NULL;
// head = (teachers *)malloc(sizeof(teachers));
if((fp = fopen("teacher","rb"))==NULL)
{
printf("cannot open flie\n");
return 0;
}
char c;
c=fgetc(fp);
if(c==EOF){return NULL;}
else{rewind(fp);}
p=malloc(sizeof(teachers));
fread(p,sizeof(teachers),1,fp);
while(!feof(fp))
{
if(head==NULL) {
head=p;
p->next=NULL;
}
else{
p1=head;
while(p1->next!=NULL){ //求得尾指针p1
p1=p1->next;
}
p1->next = p;
p->next = NULL;
p = malloc(sizeof(teachers));
fread(p,sizeof(teachers),1,fp);
}
}
free(p);
fclose(fp);
return head;
}
//添加老师
teachers *add_tea(teachers *thead)
{
teachers *p;
teachers *s,*r;
p=thead;
int ntid,flag=0;
int flag2=1;
FILE *fp=NULL;
fp=fopen("teacher","wb");
/* while(p->next!=NULL){ //求得尾指针
p=p->next;
}
r=p;
p=thead;*/
while(flag==0)
{ //控制是否继续添加
printf("输入你要添加老师的工号\n");
scanf("%d",&ntid);
while(p!=NULL){ //是否存在重工号
if(ntid==p->tid){
printf("用户已存在,重新输入工号\n");flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}
if(flag2==1){
char ntnam[20];
int ntpasswd,ntage;
char ntsex;
// getchar();
// fflush(stdin);
printf("请插入老师的工号,姓名,密码,性别,年龄\n");
scanf("%d",&ntid);
while(getchar()!='\n');
gets(ntnam);
scanf("%d",&ntpasswd);
while(getchar()!='\n');
ntsex=getchar();
scanf("%d",&ntage);
//scanf("%d%s%d%c%d",&ntid,ntnam,&ntpasswd,&ntsex,&ntage);
s=malloc(sizeof(teachers));
s->tid=ntid;
strcpy(s->tname,ntnam);
s->tpasswd=ntpasswd;
s->tage=ntage;
s->tsex=ntsex;
//fp=fopen("teacher","wb");
// fwrite(s,sizeof(teachers),1,fp);
if(thead==NULL)
{
thead=s;
thead->next=NULL;
}
else
{
r=thead;
while(r->next!=NULL){ //求得尾指针
r=r->next;
}
r->next=s;
s->next=NULL;
}
}
printf("是否继续添加老师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
listtofile_tea(s);
fclose(fp);
return thead;
}
//修改教师信息
teachers *change_tea(teachers *thead){
teachers *p;
teachers *r;
int ntid;
//int flag=0;
int flag2=0;
while(1){
printf("输入要修改教师工号\n");
scanf("%d",&ntid);
while(getchar()!='\n');
p = thead;
while(p!=NULL){ //是否存在此教师
if(ntid==p->tid){
flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}r=p; p=thead;
if(flag2==1){
printf("此教师不存在\n");
}
else{
int num;
int ntpasswd=0,ntage=0;
char ntsex,ntnam[20];
printf("输入要修改教师的信息1.工号\t2.姓名\t3.密码\t4.性别\t5.年龄\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的工号\n");
scanf("%d",&ntid);
r->tid=ntid;//free(r);
break;
case 2:printf("输入新的姓名\n");
scanf("%s",ntnam);
strcpy(r->tname,ntnam);//free(r);
break;
case 3:printf("输入新的密码\n");
scanf("%d",&ntpasswd);r->tpasswd=ntpasswd;//free(r);
break;
case 4:printf("输入新的性别\n");
scanf("%c",&ntsex);r->tsex=ntsex;//free(r);
break;
case 5:printf("输入新的年龄\n");
scanf("%d",&ntage);r->tage=ntage;//free(r);
break;
default :printf("不做修改\n");break;
}
}
printf("是否继续修改教师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
return thead;
}
//删除老师
teachers *del_tea(teachers *thead){
teachers *p;
//students *r=NULL;
int num;
p=thead;
//char nname[20],nclass[20];
int flag=0;
while(flag==0){
printf("输入要删除老师的工号或姓名\n1.按工号删除\t2.按姓名删除\t\n");
scanf("%d",&num);
switch(num){
case 1:
del_tea_gh(p);break; //按工号删除
case 2:
del_teaxm(p);break; //按姓名删除
default :
printf("不删除老师\n");break;
}
printf("是否继续删除教师y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}
}
return thead;
}
//按工号删除教师
void del_tea_gh(teachers *thead){
int flag2,ntid;
teachers *p;
teachers *r;
teachers *q;
p=thead;
q=thead;
printf("输入你要删除教师的工号\n");
scanf("%d",&ntid);
while(p!=NULL){ //是否存在此教师
if(ntid==p->tid){
flag2=0;
r=p;
// p=phead;
break;
}else{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1){
printf("此教师不存在\n");
}else{
printf("确定删除此教师y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y'){
if(r==thead)
{
thead=thead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}else{
printf("不删除此教师\n");
}
}
}
//按姓名删除教师
void del_teaxm(teachers *thead)
{
int flag2;
char ntname[20];
teachers *p;
teachers *r;
teachers *q;
p=thead;
q=thead;
printf("输入你要删除教师的姓名\n");
scanf("%s",ntname);
while(p!=NULL)
{ //是否存在此教师
if(strcmp(p->tname,ntname)==0)
{
flag2=0;
r=p;
// p=phead;
break;
}
else
{
flag2=1;
}
q=p;
p=p->next;
}
if(flag2==1)
{
printf("此教师不存在\n");
}
else
{
printf("确定删除此教师y/n\n");
while(getchar()!='\n');
if(getchar()=='y'||getchar()=='Y')
{
if(r==thead)
{
thead=thead->next;
}
else
{
r=r->next;
q->next=r;
free(r);
}
}
else{
printf("不删除此教师\n");
}
}
}
//按工号查询
void serch_gh(teachers *thead)
{
int ntid;
int flag=1;
teachers *p;
p=thead;
printf("输入你要查找教师的工号\n");
scanf("%d",&ntid);
while(p!=NULL)
{
if(p->tid!=ntid){
flag=0;
}else{
//fread(p,sizeof(students),1,fp);
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex, p->tage);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//按姓名查询
void serch_txm( teachers *thead)
{
char ntname[20];
int flag=1;
teachers * p;
p=thead;
printf("输入你要查找教师的姓名\n");
while(getchar()!='\n');
gets(ntname);
while(p!=NULL)
{
if(strcmp(p->tname,ntname)!=0){
flag=0;
}else
{
// fread(p,sizeof(students),1,fp);
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex,p->tage);
flag=1;
break;
}
p=p->next;
}
if(flag==0){
printf("用户不存在\n");
}
}
//查询教师
void chazhao_tea(teachers *thead)
{
//int flag=1;
int num;
while(1)
{
printf("查询教师\n1.按工号\t2.按姓名\n");
scanf("%d",&num);
switch(num){
case 1:serch_gh(thead);break;
case 2:serch_txm(thead);break;
//case 3:serch_cj(phead);break;
default:printf("输入错误\n");break;
}
//getchar();
printf("是否继续查询y/n\n");
while(getchar()!='\n');
if((getchar()=='n')||(getchar()=='N')){
break;
}
//else{flag=1;}
}
}
//显示全部教师信息
teachers *xianshi_tea(teachers *thead)
{
int flag=0;
while(flag==0){
printf("显示教师信息\n");
xs_tea_gh(thead);
//tprintall(thead);
printf("是否继续显示教师信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
flag=1;break;
}
}
return thead;
}
// 按工号排序
void xs_tea_gh( teachers *thead )
{
teachers *p,*q, *p_min, *tail,*first,*min;
//tail = NULL;
first=p=NULL;
// fread(phead,sizeof(students),1,fp);
// 选择排序
q=thead;
while(q!=NULL){
for(p=q,min=q;p->next!=NULL;p=p->next){
if(p->next->tid<min->tid){
p_min=p;
min=p->next;
}
}//结束for循环
if(first==NULL){
first=min;
tail=min;
}
else{
tail->next=min;
tail=min;
}
if(min==q){
q=q->next;
}
else{
p_min->next=min->next;
}
}//结束while循环
if(first!=NULL){
tail->next=NULL;
}
printf("工号\t姓名\t密码\t性别\t年龄\n");
for(p=first;p!=NULL;p=p->next)
{
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",p->tid,p->tname,p->tpasswd,p->tsex,p->tage);
}
}
//显示教师信息
void tprint( teachers *head )
{
printf("工号\t姓名\t密码\t性别\t年龄\n");
printf("%d\t\t%s\t\t%d\t\t%c\t\t%d\t\n",head->tid,head->tname,head->tpasswd,head->tsex,
head->tage);
}
===================================================================================
/*
* main.c
*
* Created on: 2014-12-5
* Author: yao
*/
#include"xjgl.h"
//#include"tea.c"
//#include"stu.c"
//管理员操作
//void caozuo_stu(students *);
//void caozuo_tea(teachers *);
void manager(teachers *tphead,students *phead)
{
int ntid,ntpasswd;
int num;
int flag=0,flag2=0,flag3=0;
students *ps=NULL;
teachers *pt=NULL;
// ps=stu_filetolist("student");
// pt=tea_filetolist("teacher");
ps=phead;
pt=tphead;
printf("欢迎管理员\n");
while(flag==0)
{
printf("输入你的帐号和密码\n");
scanf("%d%d",&ntid,&ntpasswd);
//printf("输入你的帐号和密码\n");
//scanf("%d%d",&ntid,&ntpasswd);
if((123!=ntid)||(123!=ntpasswd))
{
flag=1;
}
else{
while(flag2==0)
{
ps=phead;
pt=tphead;
printf("1.操作学生信息\n2.操作教师信息\n0.返回\n");
scanf("%d",&num);
switch(num)
{
case 0:flag3=1;break;
case 1:caozuo_stu(ps);break; //操作学生信息
case 2:caozuo_tea(pt);break; //操作教师信息
default :printf("不做任何行为\n");break;
}
if(flag3==1){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag2=1;break;}
else{flag2=0;}
}
}
if(flag==1)
{
printf("密码错误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
else{flag=0;}
}
if(flag2==1)break;
if(flag3==1){break;}
}
}
//操作学生
void caozuo_stu(students *phead)
{
students *p=NULL;
//p=phead;
int num,flag=0,flag2=0;
while(flag==0){
p=phead;
printf("*************************\n");
printf("1.添加学生 \t2.删除学生\n3.修改学生信息\t4.查找学生\n5.显示全部学生\t0.返回\n");
printf("*************************\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=1;break;
case 1:add_stu(p);break;
case 2:del_stu(p);break;
case 3:change_stu(p);break;
case 4:chazhao_stu(p);break;
case 5:xianshi_stu(p);break;
default :printf("不操作学生信息\n");break;
}
if(flag2==1){break;}
printf("是否继续操作学生y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag=1;break;}
}
}
//操作教师
void caozuo_tea(teachers *phead)
{
teachers *p=NULL;
//p=phead;
int num,flag=1,flag2=0;
while(flag){
p=phead;
printf("***************\n");
printf("1.添加教师\n2.删除教师\n3.修改教师信息\n4.显示教师\n5.查找教师\n0.返回\n");
printf("***************\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=1;break;
case 1:add_tea(p);break;
case 2:del_tea(p);break;
case 3:change_tea(p);break;
case 4:xianshi_tea(p);break;
case 5:chazhao_tea(p);break;
default :printf("不操作教师\n");break;
}
if(flag2==1){break;}
printf("是否继续操作教师y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag=0;break;}
}
}
//教师登录操作
//显示教师信息
teachers *teacher(teachers *tphead,students *phead){
int ntid,ntpasswd;
int num;
int flag=0,flag2=1;
teachers *pt;
students *ps;
pt=tphead;
ps=phead;
while(1)
{ pt=tphead;
printf("输入你的工号和密码\n");
scanf("%d%d",&ntid,&ntpasswd);
while(pt!=NULL) //检测密码是否正确
{
//fread(pt,sizeof(teachers),1,fp);
if((pt->tid!=ntid)||(pt->tpasswd!=ntpasswd))
{
flag=1; //密码不正确
}
else{
flag=0;break; //密码正确
}
pt=pt->next;
}
if(flag==1)
{
printf("你输入的工号或密码有误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
//else{flag2=0;}
}
if(flag==0)
{
printf("欢迎%s老师\n",pt->tname);
while(1)
{
printf("1.查看或修改自己信息\t\n2.查看或修改学生信息\n0.返回主菜单\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=0;break;
case 1:tea_change(pt);break; //修改或查看自己信息
case 2:tea_change_stu(ps);break; //查看或修改学生信息
default :printf("不做任何行为\n");break;
}
if(flag2==0){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){break;}
}
if(flag2==0){break;}
//else{flag=0;}
}
}
return tphead;
}
//查看或修改自己信息
void tea_change(teachers *phead)
{
teachers *p=NULL;
p=phead;
int num;
printf("1.查看自己信息\t\n2.修改自己信息\n");
scanf("%d",&num);
switch(num)
{
case 1:tprint(p);break; //显示自己信息
case 2:tea_change_tea(p);tprint(p);break; //老师自己修改自己信息
default :printf("不做任何操作\n");break;
}
}
//老师修改自己信息
void tea_change_tea(teachers *phead)
{
int num;
int ntpasswd=0;
char tnam[20];
printf("输入要修改的信息1.姓名\t2.密码,0.返回\n");
scanf("%d",&num);
switch(num){
case 0:break;
case 1:printf("输入新的姓名\n");
scanf("%s",tnam);
strcpy(phead->tname,tnam);//free(r);
break;
case 2:printf("输入新的密码\n");
scanf("%d",&ntpasswd);phead->tpasswd=ntpasswd;//free(r);
break;
default :printf("不做修改\n");break;
}
}
//教师查看或修改学生信息
void tea_change_stu(students *phead)
{
students *p=NULL;
p=phead;
int num;
printf("\n1.查看所有学生信息\t\n2.修改学生成绩\t\n3.查找学生\t\n");
scanf("%d",&num);
switch(num)
{
case 1:xianshi_stu(p);break;
case 2:tea_changestu(p);print(p);break;
case 3:chazhao_stu(p);break;
default :printf("不做任何操作\n");break;
}
}
///老师修改学生成绩
void tea_changestu(students *phead)
{
students *p=NULL;
students *r=NULL;
int nid;
int flag=0;
int flag2=0;
while(flag==0){
printf("输入要修改学生学号\n");
scanf("%d",&nid);
while(getchar()!='\n');
p = phead;
while(p!=NULL){ //是否存在此学生
if(nid==p->id){
flag2=0;
break;
}else{
flag2=1;
}
p=p->next;
}r=p; p=phead;
if(flag2==1){
printf("此学生不存在\n");
}
else{
int num;
float ma=0,cyuy=0,yw=0;
printf("输入要修改学生的成绩1.数学成绩\t2..c成绩\t3.语文成绩\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的数学成绩\n");
scanf("%f",&ma);
r->math=ma;//free(r);
break;
case 2:printf("输入新的c语言成绩\n");
scanf("%f",&cyuy);
r->c=cyuy;//free(r);
break;
case 3:printf("输入新的语文成绩\n");
scanf("%f",&yw);
r->yuwen=yw;//free(r);
break;
default :printf("不做修改\n");break;
}
}
printf("是否继续修改学生信息y/n\n");
while(getchar()!='\n'); //防止下面getchar取得\n
if((getchar()=='n')||(getchar()=='N')){
break;
}else{
flag=0;
}
}
}
//学生登录操作
students *student(students *phead){
int nid,npasswd;
int num;
students *p=NULL;
p=phead;
while(1)
{
p=phead;
int flag=1,flag2=1;;
printf("输入你的学号和密码\n");
scanf("%d%d",&nid,&npasswd);
while(p!=NULL)
{
if((p->id!=nid)||(p->stuna.passwd!=npasswd))
{
flag=0;
}
else{
flag=1;break;
}
p=p->next;
}
if(flag==0)
{
printf("你输入的学号或密码有误,是否重新输入y/n\n");
if(getchar()=='n'||getchar()=='N'){break;}
}
if(flag==1)
{
printf("欢迎%s同学\n\n",p->stuna.name);
while(1){
printf("1.查看自己信息\t\n2.修改自己部分信息\n0.返回登录\n");
scanf("%d",&num);
switch(num)
{
case 0:flag2=0;break;
case 1:print(p);break;
case 2:stu_change(p);print(p);break;
default :printf("不做任何行为\n");break;
}
if(flag2==0){break;}
printf("是否继续操作y/n\n");
while(getchar()!='\n');
if(getchar()=='n'||getchar()=='N'){flag2=0;break;}
// else{flag=0;}
}
}
if(flag2==0){break;}
}
return phead;
}
void stu_change(students *phead)
{
int num;
int npasswd=0;
char nclass[20],nam[20];
printf("输入要修改的信息1.姓名\t2.密码\t3.班级\n");
scanf("%d",&num);
switch(num){
case 1:printf("输入新的姓名\n");
scanf("%s",nam);
strcpy(phead->stuna.name,nam);//free(r);
break;
case 2:printf("输入新的密码\n");
scanf("%d",&npasswd);phead->stuna.passwd=npasswd;//free(r);
break;
case 3:printf("输入新的班级名\n");
scanf("%s",nclass);
strcpy(phead->stuna.class,nclass);//free(r);
break;
default :printf("不做修改\n");break;
}
}
void menu(){
printf("\n\n******** 学籍管理系统***********\t\n");
printf("\n1.管理员登录\t2.教师登录\t\n");
printf("\n3.学生登录\t0.保存退出\t\n");
printf("*********************************\n");
}
int main()
{
int sel,flag=0;
students *ls=NULL;
teachers *lt=NULL;
ls=filetolist_stu();
lt=filetolist_tea();
while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);
switch(sel)
{
case 0:flag=1;break;
case 1:manager(lt,ls);break;
case 2:lt=teacher(lt,ls);break;
case 3:ls=student(ls);break;
default: printf("........\n");break;
}
if(flag==1){break;}
}
listtofile_stu(ls);
listtofile_tea(lt);
return 0;
}
0 0
- 学生管理系统源代码
- 学生成绩管理项目源代码
- 一个学生管理系统
- 学生同学录管理系统
- 学生管理系统
- 销售学生管理系统
- 学生通讯管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生学籍管理系统
- 学生管理系统
- 学生通讯录管理系统
- 学生管理系统
- 学生管理系统源程序
- 学生管理系统源程序
- 学生管理系统实现
- iOS开发 delegate,SEL和Block
- Android使用Asynchronous Http Client完成登录保存cookie的问题
- [leetCode] Regular Expression Matching
- 【LeetCode】Merge Two Sorted Lists
- Visual Studio 2013 C/C++单元测试
- 学生管理系统源代码
- C 语言程序设计实践 4.4 车牌号
- ios开发——用UITableView展示多行多列图片
- 分布式爬虫系统
- C 语言程序设计实践 4.5 四边形
- 系统定时任务 crontab
- 写出高性能SQL语句的35条方法分析
- C 语言程序设计实践 4.6 第几天
- Codeforces Round #277 (Div. 2)E题