学生成绩管理系统源代码
(总15页)
本页仅作为文档封面,使用时可以删除
This page is only the cover as a document 2021year
cprintf(\"\\n\\r 8.保存学生成绩信息 在这里你可以将学生你信息保存到内存中.\\n\");
3
cprintf(\"\\n\\r 9.帮助学生成绩信息 在这里你可以获得帮助信息.\\n\");
cprintf(\"\\n\\r 0.退出系统 在这里选择是否保存后,你可以安全的退出本系统.\\n\\n\\r \"); }
void menu() {
cprintf(\"\\n\\r\\xc9\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcb\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xbb\");
cprintf(\"\\r\\xba 学生信息导入 \\xba 学生信息处理 \\xba\");
cprintf(\"\\r\\xba____________________________________\\xba__________________________________________\\xba\");
cprintf(\"\\r\\xba 1-->输入学生成绩信息 \\xba 6-->学生成绩信息统计 \\xba\");
cprintf(\"\\r\\xba 2-->注销学生成绩信息 \\xba 7-->显示学生成绩信息 \\xba\");
cprintf(\"\\r\\xba 3-->查询学生成绩信息 \\xba 8-->保存学生成绩信息 \\xba\");
cprintf(\"\\r\\xba 4-->修改学生成绩信息 \\xba 9-->帮助学生成绩信息 \\xba\");
cprintf(\"\\r\\xba 5-->学生成绩信息排序 \\xba 0-->退出系统 \\xba\");
cprintf(\"\\r\\xc8\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xca\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xcd\\xbc\"); }
void wrong() {
cprintf(\"\\n\\r输入错误!请验证后重新输入.\\n\"); }
void notfind() {
cprintf(\"\\n\\r该学生信息不存在!请验证后重新输入.\\n\"); }
void printc() /* 此函数用于输出中文格式 */
3
{
cprintf(\"\\r学号 姓名 班级 英语 数学 C语言 总分 平均分\\n \"); }
void printe(Node *p) /* 此函数用于输出英文格式 */ {
cprintf(\"\\r%-4s%-4s%4s%5d%5d%8d%5d%7d\\n\\r\>data.cla,p->data.score3,p->data.score2,p->data.score1,p->data.total,p->data.ave); }
Node* Locate(L l,char findinfo[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */ {
Node *r;
if(strcmp(nameornum,\"num\")==0) /* 按学号查询 */ {
r=l->next;
while(r!=NULL) {
if(strcmp(r->data.num,findinfo)==0) return r; r=r->next; } }
else if(strcmp(nameornum,\"name\")==0) /* 按姓名查询 */ {
r=l->next;
while(r!=NULL) {
if(strcmp(r->data.name,findinfo)==0) return r; r=r->next; } }
return 0; }
void input(L l) /* 增加学生 */ {
Node *p,*r,*s; char num[10]; r=l;
4
s=l->next;
while(r->next!=NULL)
5
r=r->next; /* 将指针置于最末尾 */ while(1)
{ cprintf(\"\\r如果输入完毕,请按任意键返回主菜单\\n\"); cprintf(\"\\r如果你还想输入,请按y(yes)继续\\n\\r\"); scanf(\"%s\
if(strcmp(num,\"y\")==0) { cprintf(\"请你输入学号:\"); scanf(\"%s\while(s) {
if(strcmp(s->data.num,num)==0) {
printf(\"\学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\\n\print1(); printc(); printe(s); print1(); printf(\"\\n\"); getch(); return; }
s=s->next; }
p=(Node *)malloc(sizeof(Node)); strcpy(p->data.num,num); cprintf(\"\\r请你输入姓名:\"); scanf(\"%s\getchar();
cprintf(\"\\r请你输入班级:\"); scanf(\"%s\getchar();
cprintf(\"\\r请你输入c语言成绩(0-100):\"); scanf(\"%d\getchar();
cprintf(\"\\r请你输入数学成绩(0-100):\"); scanf(\"%d\getchar();
cprintf(\"\\r请你输入英语成绩(0-100):\"); scanf(\"%d\getchar();
p->data.total=p->data.score3+p->data.score1+p->data.score2;
p->data.ave=p->data.total / 3; /* 信息输入已经完成 */
p->next=NULL;
5
r->next=p;
r=p;shoudsave=1; } }
void query(L l) /* 查询学生信息 */ {
int select;
char findinfo[20]; Node *p; if(!l->next) {
cprintf(\"\\n 没有信息可以查询!\\n\"); return; }
cprintf(\"\\n1==>按学号查找\\n\\r2==>按姓名查找\\n\\r\"); scanf(\"%d\if(select==1) /* 学号 */ {
cprintf(\"\\r请你输入要查找的学号:\"); scanf(\"%s\
p=Locate(l,findinfo,\"num\"); if(p) {
cprintf(\" 查找结果\\n\\r\"); print1(); printc(); printe(p); print1(); } else
notfind(); }
else if(select==2) /* 姓名 */ {
cprintf(\"\\r请你输入要查找的姓名:\"); scanf(\"%s\
p=Locate(l,findinfo,\"name\"); if(p) {
cprintf(\" 查找结果\\n\\r\"); print1(); printc(); printe(p);
6
print1(); } else
notfind(); } else wrong(); }
void Delete(L l) /* 删除学生信息 */ {
int select; Node *p,*r;
char findinfo[20]; if(!l->next) {
cprintf(\"\\n 没有信息可以删除!\\n\"); return; }
cprintf(\"\\n1==>按学号删除\\n\\r2==>按姓名删除\\n\\r\"); scanf(\"%d\if(select==1) {
cprintf(\"\\r请你输入要删除的学号:\"); scanf(\"%s\
p=Locate(l,findinfo,\"num\"); if(p) { r=l;
while(r->next!=p) r=r->next;
r->next=p->next; free(p);
cprintf(\"\\n\\r该学生已经成功删除!\\n\"); shoudsave=1; } else
notfind(); }
else if(select==2) {
cprintf(\"\\r请你输入要删除的姓名:\"); scanf(\"%s\
p=Locate(l,findinfo,\"name\"); if(p)
7
{ r=l;
while(r->next!=p) r=r->next;
r->next=p->next; free(p);
cprintf(\"\\n\\r该学生已经成功删除!\\n\"); shoudsave=1; } else
notfind(); }
else wrong(); }
void modify(L l) /*修改学生信息*/ {
Node *p;
char findinfo[20]; if(!l->next) {
cprintf(\"\\n\\r没有信息可以修改!\\n\"); return; }
cprintf(\"\\r请你输入要修改的学生学号:\"); scanf(\"%s\
p=Locate(l,findinfo,\"num\"); if(p) {
cprintf(\"\\r请你输入新学号(原来是%s):\scanf(\"%s\
cprintf(\"\\r请你输入新姓名(原来是%s):\scanf(\"%s\getchar();
cprintf(\"\\r请你输入新班级(原来是%s):\scanf(\"%s\
cprintf(\"\\r请你输入新的c语言成绩(原来是%d分):\scanf(\"%d\getchar();
cprintf(\"\\r请你输入新的数学成绩(原来是%d分):\scanf(\"%d\getchar();
cprintf(\"\\r请你输入新的英语成绩(原来是%d分):\scanf(\"%d\
8
p->data.total=p->data.score3+p->data.score1+p->data.score2; p->data.ave=p->data.total/3; cprintf(\"\\n\\r信息修改成功!\\n\"); shoudsave=1; } else
notfind(); }
void display(L l)
{ /*显示全部学生信息*/ int count=0; Node *p; p=l->next; if(!p) {
cprintf(\"\\n\\r 没有信息可以显示!\\n\"); return; }
cprintf(\" 显示结果 \"); print1(); printc(); while(p)
{ if(count%5==0) getch(); printe(p); p=p->next; count++; }
print1(); cprintf(\"\\n\"); }
void Statistic(L l) /*统计学生信息*/ {
Node *pm_max,*pe_max,*pc_max,*pt_max,*pa_max; /* 用于指向分数最高的接点 */
Node *pm_min,*pe_min,*pc_min,*pt_min,*pa_min; Node *r=l->next; if(!r) {
cprintf(\"\\n\\r 没有信息可以统计!\\n\"); return ; }
pm_max=pe_max=pc_max=pt_max=pa_max=pm_min=pe_min=pc_min=pt_min=pa_min=r;
9
while(r!=NULL) {
if(r->data.score1>=pc_max->data.score1) pc_max=r;
if(r->data.score1<=pc_min->data.score1) pc_min=r;
if(r->data.score2>=pm_max->data.score2) pm_max=r;
if(r->data.score2<=pm_min->data.score2) pm_min=r;
if(r->data.score3>=pe_max->data.score3) pe_max=r;
if(r->data.score3<=pe_min->data.score3) pe_min=r;
if(r->data.total>=pt_max->data.total) pt_max=r;
if(r->data.total<=pt_min->data.total) pt_min=r;
if(r->data.ave>=pa_max->data.ave) pa_max=r;
if(r->data.ave<=pa_min->data.ave) pa_min=r; r=r->next; }
cprintf(\"====================================统计结果====================================\\n\");
cprintf(\"\\r总分最高者: %-16s %d分\\n\cprintf(\"\\r平均分最高者: %-16s %d分\\n\>data.ave);
cprintf(\"\\r英语最高者: %-16s %d分\\n\>data.score3);
cprintf(\"\\r数学最高者: %-16s %d分\\n\>data.score2);
cprintf(\"\\rc语言最高者: %-16s %d分\\n\\r\>data.score1);
cprintf(\"\\r总分最低者: %-16s %d分\\n\cprintf(\"\\r平均分最低者: %-16s %d分\\n\cprintf(\"\\r英语最低者: %-16s %d分\\n\>data.score3);
cprintf(\"\\r数学最低者: %-16s %d分\\n\>data.score2);
10
cprintf(\"\\rc语言最低者: %-16s %d分\\n\\r\>data.score1); print1();
11
}
void Sort(L l) { L ll;
Node *p,*rr,*s;
ll=(L)malloc(sizeof(Node)); /* 用于做新的连表 */ ll->next=NULL; if(l->next==NULL) {
cprintf(\"\\n\\r 没有信息可以排序!\\n\"); return ; }
p=l->next; while(p) {
s=(Node*)malloc(sizeof(Node)); /* 新建接点用于保存信息 */ s->data=p->data; s->next=NULL; rr=ll;
while(rr->next!=NULL && rr->next->data.total>=p->data.total) rr=rr->next;
if(rr->next==NULL) rr->next=s; else {
s->next=rr->next; rr->next=s; }
p=p->next; }
free(l);
l->next=ll->next;
cprintf(\"\\n\\r 排序已经完成!\\n\"); }
void Save(L l) /* */ {
FILE* fp; Node *p;
int flag=1,count=0;
fp=fopen(\"c:\\\\student\if(fp==NULL) {
11
cprintf(\"\\n\\r 重新打开文件时发生错误!\\n\"); exit(1); }
p=l->next; while(p) {
if(fwrite(p,sizeof(Node),1,fp)==1) {
p=p->next; count++; } else {
flag=0; break; } }
if(flag) {
cprintf(\"\\n\\r 文件保存成功.(有%d条信息已经保存.)\\n\\r\shoudsave=0; }
fclose(fp); }
void main() /* */ {
L l; /* 链表 */
FILE *fp; /* 文件指针 */
int count=0 ,i,menu_select; /*菜单选择 */ char ch ,creat; Node *p,*r; time_t it; clrscr();
textmode(C80); window(1,1,80,25);
textbackground(1); clrscr(); textcolor(10);
printf(\"\\r 学生成绩管理系统 \");
printf(\"\\r -------扬州大学信息工程学院软件0902班 \") ;
printf(\"\\r 设计人员:李天鹏 \"); l=(Node*)malloc(sizeof(Node));
12
l->next=NULL;r=l;
fp=fopen(\"c:\\\\student\if(fp==NULL) {
cprintf(\"\\n\\r 该文件还未存在,是否需要创建(y/n,Y/N)\\n\\r\"); scanf(\"%c\if(creat=='y'||creat=='Y') {
fp=fopen(\"c:\\\\student\} else exit(0); }
gotoxy(9,11); textcolor(12);
cprintf(\"\\n\\r 文件已经打开,系统正在导入信息\"); for(i=0;i<6;i++) { cprintf(\".\"); sleep(1); }textcolor(10);
gotoxy(9,11); cprintf(\"\\n \"); while(!feof(fp)) {
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */ {
p->next=NULL; r->next=p;
r=p; /* 将该接点挂入连中 */ count++; } }
fclose(fp); /* 关闭文件 */ gotoxy(1,3);
cprintf(\"\\n\\r信息导入完毕,系统共导入%d条信息 \sleep(1); while(1) { menu(); textcolor(12);
cprintf(\"\\r现在时间: \"); it=time(NULL);cprintf(ctime(&it)); cprintf(\"\\r左边数字对应功能选择,请按0--9选择操作:\\n\\r\"); textcolor(10) ;
scanf(\"%d\
13
if(menu_select==0) {
if(shoudsave==1)
{ getchar(); textcolor(128+12);
cprintf(\"\\n\\r 信息已经改动,是否将改动保存到文件中(y/n Y/N)\\n\\r\"); scanf(\"%c\if(ch=='y'||ch=='Y') Save(l); }
cprintf(\"\\n\\r 你已经成功退出学生成绩信息系统,欢迎下次继续使用!\\n\"); break; }
switch(menu_select)
{case 1: clrscr(); input(l); clrscr(); break; /* 输入学生 */ case 2: clrscr(); Delete(l); PRINT1 /* 删除学生 */ case 3: clrscr(); query(l); PRINT1 /* 查询学生 */ case 4: clrscr(); modify(l); PRINT1 /* 修改学生 */ case 5: clrscr(); Sort(l); PRINT1 case 6: clrscr(); Statistic(l); PRINT1 case 7: clrscr(); display(l); PRINT1
case 8: clrscr(); Save(l); PRINT1 /* 保存学生 */
case 9: clrscr(); cprintf(\" ==========帮助信息==========\\n\"); print2(); PRINT1 ; default: wrong(); getchar(); break;} } }
14
因篇幅问题不能全部显示,请点此查看更多更全内容