📄 jisuanqi.txt
字号:
}
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 + -