//排序次数
bubbleSort(hhead);
int sign=0;
ppointer pp;
pp=hhead->next;
while(pp!=NULL){
printf("%s\t",pp->id);
printf("%s\t",pp->name);
printf("%s\t",pp->week);
printf("%.0f%%\n",(1-pp->cishu/5.0)*100);
sign++;
pp=pp->next;
}
if(sign==0)
printf("无考勤记录\n");
}
为什么这个“cishu"输出不了。
以下是完整代码
#include<stdio.h>
#include<string.h>
#include<windows.h> //windows图形界面相关
int opt;//功能选择变量
int count=0;//考勤记录条数
//单链表-》考情记录
typedef struct node *pointer;
struct node{
char order[20];
char id[20];
char name[20];
char week[20];
char day[20];
char part[20];
char course[20];
char reason[20];
//int cishu;
pointer next;
};
typedef pointer lklist;
lklist head;
typedef struct nnode *ppointer;
struct nnode{
char id[20];
char name[20];
char week[20];
int cishu;
ppointer next;
};
typedef ppointer llklist;
//二叉树-》班级成员
typedef struct nodes * pointers;
struct nodes{
char account[20];
char password[20];
char power[20];
pointers lchild,rchild;
};
typedef pointers bitree;
bitree t;
//队列,辅助层序遍历
const int maxsize=100;
typedef struct{
bitree data[maxsize];
int front,rear;
}sqqueue;
//主要功能函数声明
bitree level_creat();
int login(char no[20],char pwd[20]);
int administrator();
void classattendance();
void classpeople();
int modifypeople(bitree t);
int deletepeople(bitree t);
int insertpeople();
void levelorder(bitree t);
int committee();
void sta(lklist head,int k);
void all(lklist head);
void modify(lklist head,int k);
int updata(pointer p);
int deletes(lklist head,int k);
int insert(lklist head,int i);
pointer get(lklist head,int i);
int student(char no[20]);
void stuweek();
void weekall();
void data();
void mwlocate(lklist head,char no[20],int week);
void swlocate(lklist head,char name[20],int week);
void walocate(lklist head,int week);
lklist creat();
lklist initlist();
int de_sqqueue(sqqueue *sq,bitree *x);
int empty_sqqueue(sqqueue *sq);
int en_sqqueue(sqqueue *sq,bitree x);
void init_sqqueue(sqqueue *sq);
void bubbleSort(llklist mylist);
//创建二叉树,保存班级成员信息
bitree level_creat(){
char str[20];
pointers Q[100];
int front,rear;
pointers root,s;
root=NULL;
front=rear=0;
int dept=1;
FILE *fp6;
if ((fp6=fopen("用户信息文件.txt","r"))==NULL){
printf("用户信息文件不存在\n");
return 0;
}
while(!feof(fp6)){
s=new nodes;
fscanf(fp6,"%s",str);
strcpy(s->account,str);
fscanf(fp6,"%s",str);
strcpy(s->password,str);
fscanf(fp6,"%s",str);
strcpy(s->power,str);
s->lchild=s->rchild=NULL;
rear++;
Q[rear]=s;
if(rear==1){
root=s;
front=1;
}
else{
if(s&&Q[front])
if(rear%2==0)
Q[front]->lchild=s;
else
Q[front]->rchild=s;
if(rear%2==1)
front++;
}
}
fclose(fp6);
return root;
}
//初始化队列
void init_sqqueue(sqqueue *sq){
sq->front=sq->rear=0;
}
//进队
int en_sqqueue(sqqueue *sq,bitree x){
if((sq->rear+1)%maxsize==sq->front){
printf("队满,不能入队!\n");
return 0;
}
sq->rear=(sq->rear+1)%maxsize;
sq->data[sq->rear]=x;
return 1;
}
//判空
int empty_sqqueue(sqqueue *sq){
if(sq->rear==sq->front)
return 1;
else
return 0;
}
//出队
int de_sqqueue(sqqueue *sq,bitree *x){
if(sq->rear==sq->front){
printf("队空,不能出队!\n");
return 0;
}
sq->front=(sq->front+1)%maxsize;
*x=sq->data[sq->front];
return 1;
}
//单链表初始化
lklist initlist(){
pointer head;
head = new node;
head->next = NULL;
return head;
}
//创建单链表,保存学生考勤信息
lklist creat(){
count=0;
pointer rear,s;
head = new node;
rear = head;
FILE *fp2;
char str[20];
if ((fp2=fopen("学生考勤情况.txt","r"))==NULL){
printf("学生考勤情况不存在\n");
return 0;
}
while(!feof(fp2)){
s = new node;
fscanf(fp2,"%s",str);
strcpy(s->order,str);
fscanf(fp2,"%s",str);
strcpy(s->id,str);
fscanf(fp2,"%s",str);
strcpy(s->name,str);
fscanf(fp2,"%s",str);
strcpy(s->week,str);
fscanf(fp2,"%s",str);
strcpy(s->day,str);
fscanf(fp2,"%s",str);
strcpy(s->part,str);
fscanf(fp2,"%s",str);
strcpy(s->course,str);
fscanf(fp2,"%s",str);
strcpy(s->reason,str);
rear->next = s;
rear = s;
count++;
}
rear->next = NULL;
fclose(fp2);
return head;
}
//某周所有学生考勤
void walocate(lklist head,int week){
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
int sign=0;
pointer p;
p=head->next;
char wk[20];
sprintf(wk,"第%d周",week);
while(p!=NULL){
if(strcmp(p->week,wk)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
sign++;
}
p=p->next;
}
if(sign==0)
printf("%s无考勤记录\n",wk);
}
//某学生某周考勤情况
void swlocate(lklist head,char name[20],int week){
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
int sign=0;
pointer p;
p=head->next;
char wk[20];
sprintf(wk,"第%d周",week);
while(p!=NULL){
if(strcmp(p->week,wk)==0&&strcmp(p->name,name)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
sign++;
}
p=p->next;
}
if(sign==0)
printf("%s%s无考勤记录\n",name,wk);
}
//登录账号某周考勤
void mwlocate(lklist head,char no[20],int week){
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
int sign=0;
pointer p;
p=head->next;
char wk[20];
sprintf(wk,"第%d周",week);
while(p!=NULL){
if(strcmp(p->week,wk)==0&&strcmp(p->id,no)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
sign++;
}
p=p->next;
}
if(sign==0)
printf("你%s无考勤记录\n",wk);
}
//初始化并建单链表,保存考勤
void data(){
initlist();
creat();
}
//某周所有学生考勤情况
void weekall(){
printf("请输入需要查询的周数:");
scanf("%d",&opt);
walocate(head,opt);
}
//某学生某周考勤情况
void stuweek(){
char name[20];
printf("请输入需要查询的姓名:");
scanf("%s",&name);
printf("请输入需要查询的周数:");
scanf("%d",&opt);
swlocate(head,name,opt);
}
//登录账号某周考勤情况
void myweek(char no[20]){
printf("请输入需要查询的周数:");
scanf("%d",&opt);
mwlocate(head,no,opt);
}
//学生界面
int student(char no[20]){
printf("--------------------班级考勤管理系统----------------------\n");
data();
printf("学生界面\n");
printf("1、某周全班考勤查询统计\n");
printf("2、某学生某周考勤查询统计\n");
printf("3、我的考勤查询\n");
printf("0、退出\n");
printf("请输入对应数字选择功能:");
scanf("%d",&opt);
switch(opt){
case 1:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
weekall();
return 1;
}
case 2:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
stuweek();
return 1;
}
case 3:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
myweek(no);
return 1;
}
default : return 0;
}
}
//单链表定位
pointer get(lklist head,int i){
int j;
pointer p;
if(i==0)
return head;
if(i<0)
return NULL;
j=0;
p=head->next;
while(p!=NULL){
j++;
if(j==i)
break;
p=p->next;
}
return p;
}
//增加考勤记录
int insert(lklist head,int i){
FILE *fp3;
if((fp3=fopen("学生考勤情况.txt","at+"))==NULL)
fp3=fopen("学生考勤情况.txt","wb+");
fclose(fp3);
pointer q,s;
q = get(head,i-1);
if(q==NULL)
printf("非法插入位置!\n");
s = new node;
printf("请输入学生学号:");
scanf("%s",s->id);
printf("请输入学生姓名:");
scanf("%s",s->name);
printf("请输入考勤周数:");
scanf("%s",s->week);
printf("请输入考勤星期:");
scanf("%s",s->day);
printf("请输入课程节数:");
scanf("%s",s->part);
printf("请输入课程名称:");
scanf("%s",s->course);
printf("请输入考勤原因:");
scanf("%s",s->reason);
if((fp3=fopen("学生考勤情况.txt","at+"))==NULL)
{
printf("不能打开该数据库!");
return 0;
}
fprintf(fp3,"\r\n %d",++i);
fprintf(fp3," %s",s->id);
fprintf(fp3," %s",s->name);
char connect[20];
sprintf(connect,"第%s周",s->week);
fprintf(fp3," %s",connect);
sprintf(connect,"星期%s",s->day);
fprintf(fp3," %s",connect);
sprintf(connect,"第%s节",s->part);
fprintf(fp3," %s",connect);
fprintf(fp3," %s",s->course);
fprintf(fp3," %s",s->reason);
fclose(fp3);
s->next = q->next;
q->next = s;
printf("增加考勤记录成功\n");
return 1;
}
//删除考勤记录
int deletes(lklist head,int k){
pointer p,q;
q = get(head,k-1);
if(q==NULL||q->next == NULL)
printf("非法删除位置\n");
p=q->next;
q->next = p->next;
delete p;
FILE *fp4,*fp5;
if ((fp4=fopen("学生考勤情况.txt","r"))==NULL){
printf("学生考勤情况不存在\n");
return 0;
}
fp5=fopen("考勤临时文件.txt","w");
p=head->next;
while(p!=NULL){
if(strcmp(p->order,"1")!=0)
fprintf(fp5,"\r\n");
int i,j;
int sum=0;
for(i=strlen(p->order)-1,j=1;i>=0;i--){
p->order[i]=p->order[i]-'0';
sum+=p->order[i]*j;
j=j*10;
}
if(sum<k)
fprintf(fp5," %d",sum);
else
fprintf(fp5," %d",--sum);
fprintf(fp5," %s",p->id);
fprintf(fp5," %s",p->name);
fprintf(fp5," %s",p->week);
fprintf(fp5," %s",p->day);
fprintf(fp5," %s",p->part);
fprintf(fp5," %s",p->course);
fprintf(fp5," %s",p->reason);
p=p->next;
}
fclose(fp4);
fclose(fp5);
remove("学生考勤情况.txt");
rename("考勤临时文件.txt","学生考勤情况.txt");
printf("删除考勤记录成功\n");
return 1;
}
//修改考勤,建临时文件保存后删除原文件,再改名
int updata(pointer p){
FILE *fp4,*fp5;
if ((fp4=fopen("学生考勤情况.txt","r"))==NULL){
printf("学生考勤情况不存在\n");
return 0;
}
fp5=fopen("考勤临时文件.txt","w");
p=head->next;
while(p!=NULL){
if(strcmp(p->order,"1")!=0)
fprintf(fp5,"\r\n");
fprintf(fp5," %s",p->order);
fprintf(fp5," %s",p->id);
fprintf(fp5," %s",p->name);
fprintf(fp5," %s",p->week);
fprintf(fp5," %s",p->day);
fprintf(fp5," %s",p->part);
fprintf(fp5," %s",p->course);
fprintf(fp5," %s",p->reason);
p=p->next;
}
fclose(fp4);
fclose(fp5);
remove("学生考勤情况.txt");
rename("考勤临时文件.txt","学生考勤情况.txt");
printf("修改考勤记录成功\n");
return 1;
}
//修改考勤记录
void modify(lklist head,int k){
pointer p,q;
char connect[20];
q = get(head,k-1);
if(q==NULL||q->next == NULL)
printf("非法修改位置\n");
p=q->next;
printf("1、学号\n");
printf("2、姓名\n");
printf("3、周数\n");
printf("4、星期\n");
printf("5、节数\n");
printf("6、课程\n");
printf("7、原因\n");
printf("0、退出修改\n");
printf("请选择需要修改的内容:");
scanf("%d",&opt);
switch(opt){
case 1:{
printf("请输入修改后的学号:");
scanf("%s",p->id);
updata(p);
break;
}
case 2:{
printf("请输入修改后的姓名:");
scanf("%s",p->name);
updata(p);
break;
}
case 3:{
printf("请输入修改后的周数:");
scanf("%s",connect);
sprintf(p->week,"第%s周",connect);
updata(p);
break;
}
case 4:{
printf("请输入修改后的星期:");
scanf("%s",connect);
sprintf(p->day,"星期%s",connect);
updata(p);
break;
}
case 5:{
printf("请输入修改后的节数:");
scanf("%s",connect);
sprintf(p->part,"第%s节",connect);
updata(p);
break;
}
case 6:{
printf("请输入修改后的课程:");
scanf("%s",p->course);
updata(p);
break;
}
case 7:{
printf("请输入修改后的原因:");
scanf("%s",p->reason);
updata(p);
break;
}
default: break;
}
}
//所有考勤记录
void all(lklist head){
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\t次数\n");
int sign=0;
char connect[20];
char input[20];
pointer p;
p=head->next;
while(p!=NULL){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
//printf("%s\n",p->cishu);
sign++;
p=p->next;
}
if(sign==0)
printf("无考勤记录\n");
printf("1、增加考勤记录\n");
printf("2、删除考勤记录\n");
printf("3、修改考勤记录\n");
printf("4、查找考勤记录\n");
printf("0、返回\n");
printf("请输入对应数字选择功能:");
scanf("%d",&opt);
switch(opt){
case 1:{
insert(head,count);
break;
}
case 2:{
printf("请输入删除考勤的序号:");
scanf("%d",&opt);
deletes(head,opt);
break;
}
case 3:{
printf("请输入修改考勤的序号:");
scanf("%d",&opt);
modify(head,opt);
break;
}
case 4:{
printf("1、学号\n");
printf("2、姓名\n");
printf("3、周数\n");
printf("4、星期\n");
printf("5、节数\n");
printf("6、课程\n");
printf("7、原因\n");
printf("请输入查询考勤的条件:");
scanf("%d",&opt);
switch(opt){
case 1:{
printf("请输入学号:");
scanf("%s",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(input,p->id)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 2:{
printf("请输入姓名:");
scanf("%s",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(input,p->name)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 3:{
printf("请输入周数:");
scanf("%s",input);
sprintf(connect,"第%s周",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(connect,p->week)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 4:{
printf("请输入星期:");
scanf("%s",input);
sprintf(connect,"星期%s",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(connect,p->day)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 5:{
printf("请输入节数:");
scanf("%s",input);
sprintf(connect,"第%s节",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(connect,p->part)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 6:{
printf("请输入课程:");
scanf("%s",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(input,p->course)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
case 7:{
printf("请输入原因:");
scanf("%s",input);
printf("序号\t学号\t姓名\t周数\t星期\t节数\t课程\t原因\n");
pointer p;
p=head->next;
while(p!=NULL){
if(strcmp(input,p->reason)==0){
printf("%s\t",p->order);
printf("%s\t",p->id);
printf("%s\t",p->name);
printf("%s\t",p->week);
printf("%s\t",p->day);
printf("%s\t",p->part);
printf("%s\t",p->course);
printf("%s\n",p->reason);
}
p=p->next;
}
break;
}
default: break;
}
break;
}
default : break;
}
}
//出勤率计算
void sta(lklist head,int k){
printf("学号\t姓名\t周数\t出勤率\n");
pointer p,s;
p=head->next;
s=head->next;
char wk[20];
char add[20];
char refuse[20][20];
ppointer rear,ss;
llklist hhead = new nnode;
rear = hhead;
sprintf(wk,"第%d周",k);
int n=0,m=0;
while(p!=NULL){
int k=0;
for(int i=0;i<=m;i++){
if(strcmp(refuse[i],p->name)!=0)
k++;
}
if(k-1==m){
if(strcmp(wk,p->week)==0){
strcpy(add,p->id);
while(s!=NULL){
if(strcmp(add,s->id)==0&&strcmp(wk,s->week)==0){
if(n==0){
ss = new nnode;
strcpy(ss->id,s->id);
strcpy(ss->name,s->name);
strcpy(refuse[m],s->name);
strcpy(ss->week,s->week);
rear->next = ss;
rear = ss;
}
n++;
s=s->next;
}
else
s=s->next;
}
m++;
ss->cishu = n;
n=0;
}
}
rear->next = NULL;
s=head->next;
p=p->next;
}
//排序次数
bubbleSort(hhead);
int sign=0;
ppointer pp;
pp=hhead->next;
while(pp!=NULL){
printf("%s\t",pp->id);
printf("%s\t",pp->name);
printf("%s\t",pp->week);
printf("%.0f%%\n",(1-pp->cishu/5.0)*100);
sign++;
pp=pp->next;
}
if(sign==0)
printf("无考勤记录\n");
}
//冒泡排序
void bubbleSort(llklist mylist)
{
if((mylist -> next == NULL) || (mylist -> next -> next == NULL))
{
return;
}
nnode *hhead, * pre, * cur, *next, * end, * temp;
hhead = mylist;
end = NULL;
//从链表头开始将较大值往后沉
while(hhead -> next != end)
{
for(pre = hhead, cur = pre -> next, next = cur -> next; next != end; pre = pre -> next, cur = cur -> next, next = next -> next)
{
//相邻的节点比较
if(cur -> cishu < next -> cishu)
{
cur -> next = next -> next;
pre -> next = next;
next -> next = cur;
temp = next;
next = cur;
cur = temp;
}
}
end = cur;
}
}
//班委界面
int committee(){
printf("--------------------班级考勤管理系统----------------------\n");
data();
printf("班委界面\n");
printf("1、班级考勤记录\n");
printf("2、周出勤率排序\n");
printf("0、退出\n");
printf("请输入对应数字选择功能:");
scanf("%d",&opt);
switch(opt){
case 1:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
all(head);
return 1;
}
case 2:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
printf("请输入出勤率排序的周数:");
scanf("%d",&opt);
sta(head,opt);
return 1;
}
default : return 0;
}
}
//层序遍历,打印班级成员信息
void levelorder(bitree t){
pointers p;
sqqueue Q;
if(t==NULL)
return;
init_sqqueue(&Q);
en_sqqueue(&Q,t);
while(!empty_sqqueue(&Q)){
de_sqqueue(&Q,&p);
printf("%s\t",p->account);
printf("%s\t",p->password);
printf("%s\n",p->power);
if(p->lchild!=NULL)
en_sqqueue(&Q,p->lchild);
if(p->rchild!=NULL)
en_sqqueue(&Q,p->rchild);
}
}
//增加班级成员
int insertpeople(){
FILE *fp7;
if((fp7=fopen("用户信息文件.txt","ab+"))==NULL)
fp7=fopen("用户信息文件.txt","wb+");
fclose(fp7);
if((fp7=fopen("用户信息文件.txt","ab+"))==NULL)
{
printf("不能打开该数据库!");
return 0;
}
char account[20];
char password[20];
char power[20];
printf("请输入账号:");
scanf("%s",&account);
printf("请输入密码:");
scanf("%s",&password);
printf("请输入权限:");
scanf("%s",&power);
fprintf(fp7,"\r\n %s",account);
fprintf(fp7," %s",password);
fprintf(fp7," %s",power);
fclose(fp7);
printf("增加班级成员成功\n");
return 1;
}
//删除班级成员
int deletepeople(bitree t){
char str[20];
bool k=false;
printf("请输入需要删除的账号:");
scanf("%s",&str);
FILE *fp10,*fp11;
if ((fp10=fopen("用户信息文件.txt","r"))==NULL){
printf("用户信息文件不存在\n");
return 0;
}
fp11=fopen("用户临时文件.txt","w");
pointers p;
sqqueue Q;
if(t==NULL)
return 1;
init_sqqueue(&Q);
en_sqqueue(&Q,t);
while(!empty_sqqueue(&Q)){
de_sqqueue(&Q,&p);
if(strcmp(p->account,str)==0){
k=true;
}
else{
if(strcmp(p->account,"000")!=0)
fprintf(fp11,"\r\n");
fprintf(fp11," %s",p->account);
fprintf(fp11," %s",p->password);
fprintf(fp11," %s",p->power);
}
if(p->lchild!=NULL)
en_sqqueue(&Q,p->lchild);
if(p->rchild!=NULL)
en_sqqueue(&Q,p->rchild);
}
if(k==false)
printf("没有此账户\n");
fclose(fp10);
fclose(fp11);
remove("用户信息文件.txt");
rename("用户临时文件.txt","用户信息文件.txt");
printf("删除班级成员成功\n");
return 1;
}
//修改班级成员
int modifypeople(bitree t){
char str[20];
bool k=false;
printf("请输入需要更改的账号:");
scanf("%s",&str);
FILE *fp8,*fp9;
if ((fp8=fopen("用户信息文件.txt","r"))==NULL){
printf("用户信息文件不存在\n");
return 0;
}
fp9=fopen("用户临时文件.txt","w");
pointers p;
sqqueue Q;
if(t==NULL)
return 1;
init_sqqueue(&Q);
en_sqqueue(&Q,t);
while(!empty_sqqueue(&Q)){
de_sqqueue(&Q,&p);
if(strcmp(p->account,str)==0){
printf("请输入更改后的账号:");
scanf("%s",p->account);
printf("请输入更改后的密码:");
scanf("%s",p->password);
printf("请输入更改后的权限:");
scanf("%s",p->power);
k=true;
}
if(strcmp(p->account,"000")!=0)
fprintf(fp9,"\r\n");
fprintf(fp9," %s",p->account);
fprintf(fp9," %s",p->password);
fprintf(fp9," %s",p->power);
if(p->lchild!=NULL)
en_sqqueue(&Q,p->lchild);
if(p->rchild!=NULL)
en_sqqueue(&Q,p->rchild);
}
if(k==false)
printf("没有此账户\n");
fclose(fp8);
fclose(fp9);
remove("用户信息文件.txt");
rename("用户临时文件.txt","用户信息文件.txt");
printf("修改班级成员成功\n");
return 1;
}
//班级成员
void classpeople(){
printf("账号\t密码\t权限\n");
levelorder(t);
printf("1、增加班级成员\n");
printf("2、删除班级成员\n");
printf("3、修改成员权限\n");
printf("0、返回\n");
printf("请输入对应数字选择功能:");
scanf("%d",&opt);
switch(opt){
case 1:{
insertpeople();
break;
}
case 2:{
deletepeople(t);
break;
}
case 3:{
modifypeople(t);
break;
}
default : break;
}
}
void classattendance(){
all(head);
}
//管理员页面
int administrator(){
printf("--------------------班级考勤管理系统----------------------\n");
data();
t=level_creat();
printf("管理员界面\n");
printf("1、班级成员管理\n");
printf("2、班级出勤管理\n");
printf("0、退出\n");
printf("请输入对应数字选择功能:");
scanf("%d",&opt);
switch(opt){
case 1:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
classpeople();
return 1;
}
case 2:{
fflush(stdin);
system("cls");
printf("--------------------班级考勤管理系统----------------------\n");
classattendance();
return 1;
}
default : return 0;
}
}
//登录判断用户信息
int login(char no[20],char pwd[20]){
fflush(stdin);
FILE *fp1;
int ok=1;
char str[20];
if ((fp1=fopen("用户信息文件.txt","r"))==NULL){
printf("用户信息文件不存在\n");
return 0;
}
while(!feof(fp1)){
fscanf(fp1,"%s",str);
if(strcmp(str,no)==0){
fscanf(fp1,"%s",str);
if(strcmp(str,pwd)==0){
system("cls");
fscanf(fp1,"%s",str);
if(strcmp(str,"1")==0){
fclose(fp1);
while(ok){
ok=administrator();
}
return 1;
}
if(strcmp(str,"2")==0){
fclose(fp1);
while(ok){
ok=committee();
}
return 2;
}
if(strcmp(str,"3")==0){
fclose(fp1);
while(ok){
ok=student(no);
}
return 3;
}
}
else{
fclose(fp1);
return 0;
}
}
fscanf(fp1,"%s",str);
fscanf(fp1,"%s",str);
}
fclose(fp1);
return 0;
}
//欢迎页面
void welcome(){
printf("--------------------班级考勤管理系统----------------------\n");
char no[20];
char pwd[20];
printf("请输入账号:");
scanf("%s",&no);
printf("请输入密码:");
scanf("%s",&pwd);
if((login(no,pwd))==0){
printf("密码或账号输入错误,请重启应用\n",pwd);
}
}
int main(){
welcome();
return 0;
}
运行有没有报错,能否确定那个方法的问题呢?
就是不会累计次数