⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jisuanqi.txt

📁 学生成绩管理系统
💻 TXT
📖 第 1 页 / 共 2 页
字号:
} 

struct student *load(void) /*调用文件"date",读取保存的数据*/ 
{ 
 FILE *fp; 
struct student *head; 
 struct student *p,*p1; 
 int i; 
if((fp=fopen(PATH,"r"))==NULL) 
{ 
printf("\nCan not open!"); 
getchar(); 
return 0; 
} 
fscanf(fp,"%d\n",&n); 

for (i=0;i<n;i++) 
{ 
 p=(struct student*)malloc(LEN); 
 if (i==0) head=p; 
p1->next=p; 
p1=p;  
 fscanf(fp,"%ld,%g,%g,%g,%s\n",&p1->num,&p1->score[calculus],&p1->score[computer],&p1->score[english],p1->name); 
}  
 p1->next=NULL; 

fclose(fp); 
Dwindow("Save",20,10,19,5); 
window(22,13,38,14); 
cprintf("Has been loaded!"); 
getch(); 
return head; 
} 

void ListRecord(struct student *head) /*打印成绩*/ 
{ 
 struct student *p; 
 int i; 
 system("cls"); 
 clrscr(); 
 Dwindow("List",1,1,76,14); 
 window(3,4,70,5); 
 cprintf(HEADER);  
 i=0; 
 p=head; 
 if(head!=NULL) 
 do { 

window(3,6+i,70,7+i); 
 printf(FORMAT,DATA); 
 p=p->next; 
  i++; 
 }while(p!=NULL); 

} 


void quit(void) 
{ 
 char ch; 

 mainmenu(); 
 ch=Msgwindow("message","Do you want to quit?(y/n)",30,14); 
  
 if ('y'==ch) 
 { 
 window(1,1,80,25); 
 system("cls"); 
 window(1,1,78,20); 
 textcolor(YELLOW); 
 cprintf("  Make a wish\n\r"); 
 cprintf(" To pass my EXAM ^_^\n\r");  
 getche(); 
 exit(0); 
 } 
  
} 
struct student *creat(void) /*建立一个数据输入的链表*/ 
{ 
 struct student *head; 
 struct student *p1,*p2; 
 int i; 
 n=0; /*n是结点个数*/ 
 p1=p2=(struct student*)malloc(LEN); 
 input(p1); 
 head=NULL; 
 while(p1->num!=0)  
 { /*当输入的学号为0时数据输入完毕*/ 
  
 n+=1; 
 if(n==1) 
 head=p1; 
 else 
 p2->next=p1; 
 p2=p1; 
 p1=(struct student*)malloc(LEN); 
 clrscr(); 
 input(p1); 
 } 
 p2->next=NULL; 
 return head; 
} 

 

 


struct student *del(struct student *head,long num) /*删除一学生成绩*/ 
{ 
 struct student *p1,*p2; 
 if(head==NULL) { 
 printf("\nlist null!"); 
 return head; 
 } 
 p1=head; 
 while(num!=p1->num&&p1->next!=NULL) { /*p1指向的不是所要找的结点,并且后面还有结点*/ 
 p2=p1; 
 p1=p1->next; 
 } 
 if(num==p1->num) { 
 if(p1==head) 
 head=p1->next; 
 else 
 p2->next=p1->next; 
/* printf("delete:%ld\n",num);*/ 
 n-=1; /*结点数减一*/ 
 } 
 else  
 { 
 window(1,17,69,18); 
 cprintf("%ld has not been found!\n",num); 
 getchar(); 
 getch(); 
  
 } 
 return head; 
} 


struct student *insert(struct student *head,struct student *stud) /*插入一学生成绩*/ 
{ 
 struct student *p0,*p1,*p2; 
 p1=head; 
 p0=stud; 
 if(head==NULL) { 
 head=p0; 
 p0->next=0; /*使p2指向的结点作为头结点*/ 
 } 
 else { 
 while((p0->num>p2->num)&&(p1->next!=0)) { 
 p2=p1; 
 p1=p1->next; 
 } 
 if(p0->num<p1->num) { 
 if(head==p1) 
 head=p0; /*插到原来第一个结点之前*/ 
 else 
 p2->next=p0; /*插到p2指向的结点之后*/ 
 p0->next=p1; 
 } 
 else { /*插到最后的结点之后*/ 
 p1->next=p0; 
 p0->next=NULL; 
 } 
 } 
 n+=1; /*结点数加1*/ 
 return head; 
} 

void structcopy(struct student *p1,struct student *p2) 
{ 
 p1->num=p2->num; 

 strcpy(p1->name,p2->name); 
 p1->score[calculus]=p2->score[calculus]; 
 p1->score[computer]=p2->score[computer]; 
 p1->score[english]=p2->score[english]; 
  
} 
struct student *sort_num(struct student *head,int t)/*对学号排序,按从小到大的顺序*/ 
{ /*排序方法为起泡法*/ 
 struct student *p1,*p2; 
 struct student *temp; 
 int i,flag; 
 for(i=0;i<t-1;i++)  
 { 
 p1=head; 
 p2=p1->next; 
 flag=1; 
 do { 
 if(!flag)  
   { 
 p1=p1->next; 
 p2=p2->next; 
 } 
 if(p1->num>p2->num)  
   { 
 structcopy(temp,p1); 
 structcopy(p1,p2); 
 structcopy(p2,temp); 
 } 
 flag=0; 
 }while(p2->next!=0); 
 } 
} 


struct student *sort(struct student *head,int t,int sub)/*按成绩进行排序,从高到低*/ 
{ /*排序方法为起泡法*/ 
 struct student *p1,*p2; 
 struct student *temp; 
 int i,flag; 
 for(i=0;i<t-1;i++)  
 { 
 p1=head; 
 p2=p1->next; 
 flag=1; 
 do { 
 if(!flag)  
   { 
 p1=p1->next; 
 p2=p2->next; 
 } 
 if(p1->score[sub]>p2->score[sub])  
   { 
 structcopy(temp,p1); 
 structcopy(p1,p2); 
 structcopy(p2,temp); 
 } 
 flag=0; 
 }while(p2->next!=0); 
 } 
} 

void OutRecord(struct student *head) 
{ 
 struct student *p=head; 

 Dwindow("Search result",10,12,50,10); 
 window(13,15,30,16); 
 cprintf("No.%ld",p->num); 
 window(13,19,30,20); 
 cprintf("Name:%s",p->name); 
 window(31,15,49,16); 
 cprintf("Calculus:%g",p->score[calculus]); 
 window(31,17,49,18); 
 cprintf("Computer:%g",p->score[computer]); 
 window(31,19,49,20); 
 cprintf("English: %g",p->score[english]); 
} 
struct student *search1(struct student *head,long num) /*按学号查询并打印查询信息*/ 
{ 
 int flag=0; 
 struct student *p=head; 
 while(1) { 
 if (p==NULL) break; 
 else if(p->num==num) 
 if(!flag)  
   { 
 OutRecord(p); 
 flag++; 
 } 
 else 
 printf(FORMAT,DATA); 
 if(p->next==NULL) break; 
 else p=p->next; 
 } 
 if(flag==0) { 
 Dwindow("Search result",10,12,20,6); 
 window(12,15,29,16); 
 cprintf("\n\nDidn't find!"); 
 } 
} 


struct student *search2(struct student *head,char name[]) /*按姓名查询并打印查询信息*/ 
{ 
 int flag=0; 
 struct student *p=head; 
 while(1) { 
 if (p==NULL) break; 
 else if(strcmp(p->name,name)==0) 
 if(!flag)  
   { 
 OutRecord(p); 
 flag++; 
 } 
 else 
 printf(FORMAT,DATA); 
 if(p->next==NULL) break; 
 else p=p->next; 
 } 
 if(flag==0) { 
 Dwindow("Search result",10,12,20,6); 
 window(12,15,29,16); 
 cprintf("\n\nDidn't find!"); 
 } 
} 

struct student *search3(struct student *head,float score,int sub) /*按成绩和科目查询并打印查询信息*/ 
{ 
 int flag=0; 
 struct student *p=head; 
 while(1) { 
 if (p==NULL) break; 
 else if(p->score[sub]==score) 
 if(!flag)  
   { 
 OutRecord(p); 
 flag++; 
 } 
 else 
 printf(FORMAT,DATA); 
 if(p->next==NULL) break; 
 else p=p->next; 
 } 
 if(flag==0) { 
 Dwindow("Search result",10,12,20,6); 
 window(12,15,29,16); 
 cprintf("\n\nDidn't find!"); 
 } 
} 

void Dwindow(char *title,int x,int y,int width,int hight) 
{ 
 int i,j,k; 
  
 window(x,y,x+width+3,y+hight+1); 
  
 putch(' '); 
 putch(218); 
 for (i=0;i<strlen(title);i++) putch(196); 
 putch(191); 
 putch('\n'); 
 putch('\r'); 

 putch(201); 
 putch(181); 
 cprintf ("%s",title); 
 putch(198); 
 for (i=0;i<width-2-strlen(title);i++) putch(205); 
 putch(187); 
 putch('\n'); 
 putch('\r'); 
  
 putch(186); 
 putch(192); 
 for (i=0;i<strlen(title);i++) putch(196); 
 putch(217); 
 for (i=0;i<width-2-strlen(title);i++) putch(' '); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 
  
 for (i=0;i<hight-3;i++) 
 { 
 putch(186); 
 for (j=0;j<width;j++) putch(' '); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 
 } 

 putch(200); 
 for (i=0;i<width;i++) putch(205); 
 putch(188); 
 putch('\n'); 
 putch('\r'); 
} 

char Msgwindow(char *title,char *msg,int x,int y) 
{ 

 int i,j,k; 
 int width=strlen(msg)+1; 
 int hight=7; 

 window(x,y,x+strlen(msg)+10,y+11); 

 textcolor(YELLOW); 
 putch(' '); 
 putch(218); 
 for (i=0;i<strlen(title);i++) putch(196); 
 putch(191); 
 putch('\n'); 
 putch('\r'); 

 putch(201); 
 putch(181); 
 cprintf ("%s",title); 
 putch(198); 
 for (i=0;i<width-2-strlen(title);i++) putch(205); 
 putch(187); 
 putch('\n'); 
 putch('\r'); 

 putch(186); 
 putch(192); 
 for (i=0;i<strlen(title);i++) putch(196); 
 putch(217); 
 for (i=0;i<width-2-strlen(title);i++) putch(' '); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 

 putch(186); 
 for (j=0;j<width;j++) putch(' '); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 

 putch(186); 
 putch(' '); 
 textcolor(3);  
 cprintf("%s",msg); 
 textcolor(YELLOW); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 

 for (i=0;i<hight-4;i++) 
 { 
 putch(186); 
 for (j=0;j<width;j++) putch(' '); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 
 } 

 putch(186); 
 for (i=0;i<width-11;i++) putch(' '); 
 putch(218); 
 for (i=0;i<3;i++) putch(196); 
 putch(191); 
 putch(' '); 
 putch(218); 
 for (i=0;i<3;i++) putch(196); 
 putch(191); 
 putch(186); 
 putch('\n'); 
 putch('\r'); 

 putch(200); 
 for (i=0;i<width-11;i++) putch(205); 
 putch(181); 
 cprintf("Yes"); 
 putch(198); 
 putch(205); 
 putch(181); 
 cprintf("No "); 
 putch(198); 
 putch(188); 
 putch('\n'); 
 putch('\r'); 

 for (i=0;i<width-10;i++) putch(' '); 
 putch(192); 
 for (i=0;i<3;i++) putch(196); 
 putch(217); 
 putch(' '); 
 putch(192); 
 for (i=0;i<3;i++) putch(196); 
 putch(217); 
 putch('\n'); 
 putch('\r'); 
 textcolor(GREEN); 
 return (getch()); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -