C语言本科课程设计 小型学生成绩系统.docx
- 文档编号:24296443
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:31
- 大小:21.75KB
C语言本科课程设计 小型学生成绩系统.docx
《C语言本科课程设计 小型学生成绩系统.docx》由会员分享,可在线阅读,更多相关《C语言本科课程设计 小型学生成绩系统.docx(31页珍藏版)》请在冰豆网上搜索。
C语言本科课程设计小型学生成绩系统
/*本程序在VisualC++6.0中成功运行*/
#include
#include
#include
#defineNsizeof(structstud)/*宏定义,定义链表节点所占内存大小*/
#include
#defineformat1printf("|----|----------------|----|-----|-----|-----|-------|-----|-----|-----|------|\n")
#defineformat2printf("|学号| 姓名 |班级|数学|物理|英语|计算机|体育|历史|总分|平均分|\n")
#defineformat3printf("|%-3d| %-14s|%-4d|%-4.0f|%-4.0f|%-4.0f|%-6.0f|%-4.0f|%-4.0f|%-4.0f|%-5.1f|\n",p->num,p->name,p->class,p->shuxue,p->wuli,p->yingyu,p->jisuanji,p->tiyu,p->lishi,p->zongfen,p->pingjun)
structstud /*学生成绩链表结点结构体类型定义*/
{
longnum;
charname[15];
intclass;
floatshuxue;
floatwuli;
floatyingyu;
floatjisuanji;
floattiyu;
floatlishi;
floatzongfen;
floatpingjun;
structstud*next;
};
/*---------------------------输出模块---------------------------------------*/
voidprint(structstud*p)
{intcount=0; /*计数,控制翻页*/
while(p!
=NULL)
{
format1;format2;format1;format3;
p=p->next;count++;
if(count%5==0){format1;printf("\n***按任意键查看下一页:
\n");getch();system("cls");}
}
}
/*创建新信息*/
structstud*create(void)
{
structstud*p1,*p2,*head;
intk;
registerinti;/*寄存器变量,提高运行速度,尤其是k的值比较大的时候*/
printf("|**********请输入要创建学生数据的数目:
");
scanf("%d",&k);
printf("\n");
head=NULL;
if(k>0)
{
head=p2=p1=(structstud*)malloc(N);
printf("|-----请输入第1个学生的信息:
-----|\n"); /*输出时也是第一个结点*/
printf("学号:
");
scanf("%ld",&p1->num);
printf("姓名:
");
scanf("%s",p1->name);
printf("班级:
");
scanf("%d",&p1->class);
printf("数学成绩:
");
scanf("%f",&p1->shuxue);
printf("物理成绩:
");
scanf("%f",&p1->wuli);
printf("英语成绩:
");
scanf("%f",&p1->yingyu);
printf("计算机成绩:
");
scanf("%f",&p1->jisuanji);
printf("体育成绩:
");
scanf("%f",&p1->tiyu);
printf("历史成绩:
");
scanf("%f",&p1->lishi);
p1->zongfen=p1->shuxue+p1->wuli+p1->yingyu+p1->jisuanji+p1->tiyu+p1->lishi;
p1->pingjun=p1->zongfen/6;
for(i=1;i {p1=(structstud*)malloc(N); printf("\n|-----请输入第%d个学生的信息: -----|\n",i+1); printf("学号: "); scanf("%ld",&p1->num); printf("姓名: "); scanf("%s",p1->name); printf("班级: "); scanf("%d",&p1->class); printf("数学成绩: "); scanf("%f",&p1->shuxue); printf("物理成绩: "); scanf("%f",&p1->wuli); printf("英语成绩: "); scanf("%f",&p1->yingyu); printf("计算机成绩: "); scanf("%f",&p1->jisuanji); printf("体育成绩: "); scanf("%f",&p1->tiyu); printf("历史成绩: "); scanf("%f",&p1->lishi); p1->zongfen=p1->shuxue+p1->wuli+p1->yingyu+p1->jisuanji+p1->tiyu+p1->lishi; p1->pingjun=p1->zongfen/6; p2->next=p1; p2=p1; } p2->next=NULL; } printf("\n\n\t|------%d个学生的数据信息成功创建完毕,按任意键继续.--------|\n\n",k); getch(); returnhead; } /*保存信息*/ voidsave(structstud*p) {FILE*fp1,*fp2; inti=0; if((fp1=fopen("d: \\scoredata.txt","wt"))==NULL) {printf("无法打开文件! 按任意键继续."); getch(); } fp2=fopen("d: \\number.txt","wt"); while(p! =NULL) { fprintf(fp1,"%ld%s%d%f%f%f%f%f%f%f%f\n", p->num,p->name,p->class,p->shuxue,p->wuli,p->yingyu,p->jisuanji,p->tiyu,p->lishi,p->zongfen,p->pingjun); p=p->next;i++; } fclose(fp1); putw(i,fp2); /*将学生数目保存在number.txt中*/ fclose(fp2); } /*读取信息*/ structstud*load() {structstud*p1,*p2,*head; FILE*fp2,*fp0; staticinti,k; if((fp2=fopen("d: \\scoredata.txt","rt"))==NULL)/*若无已有数据文件,则创建新的数据文件*/ {printf(" |--------原始数据不存在,请输入新数据: ----------|\n\n"); head=create(); save(head); } else {fp0=fopen("d: \\number.txt","rt"); k=getw(fp0); fclose(fp0); head=NULL; if(k>0) {head=p2=p1=(structstud*)malloc(N); fscanf(fp2,"%ld%s%d%f%f%f%f%f%f%f%f", &p1->num,p1->name,&p1->class,&p1->shuxue,&p1->wuli,&p1->yingyu,&p1->jisuanji,&p1->tiyu,&p1->lishi,&p1->zongfen,&p1->pingjun); for(i=1;i {p1=(structstud*)malloc(N); fscanf(fp2,"%ld%s%d%f%f%f%f%f%f%f%f", &p1->num,p1->name,&p1->class,&p1->shuxue,&p1->wuli,&p1->yingyu,&p1->jisuanji,&p1->tiyu,&p1->lishi,&p1->zongfen,&p1->pingjun); p2->next=p1; p2=p1; } p2->next=NULL; } returnhead; fclose(fp2);} } /*查找数据*/ structstud*findID(structstud*p) { longnum; printf("请输入要查找学生的学号: ");/*按学号查找*/ scanf("%ld",&num); while(p! =NULL) { if(p->num==num)returnp; /*找到则返回指向该节点的指针p*/ p=p->next; /*指针后移*/ } returnNULL; /*未找到则返回空指针NULL*/ } structstud*findname(structstud*p,intk)/*按姓名和班级查找*/ { charinquire_name[15]; printf("请输入要查找学生的姓名: "); scanf("%s",inquire_name); while(p! =NULL) { if(! strcmp(p->name,inquire_name)&&p->class==k)returnp; /*找到则返回指向该节点的指针p*/ p=p->next; /*指针后移*/ } returnNULL;/*未找到则返回空指针NULL*/ } /*统计各分数段人数*/ stat(structstud*p,intchoice) { intk1=0,k2=0,k3=0,k4=0;/*定义优秀,良好,及格,不及格人数*/ floattemp; intk; printf("请输入班级的序号: "); scanf("%d",&k); while(p! =NULL) { switch(choice) /*选择科目*/ {case1: temp=p->shuxue;break; case2: temp=p->wuli;break; case3: temp=p->yingyu;break; case4: temp=p->jisuanji;break; case5: temp=p->tiyu;break; case6: temp=p->lishi;break; case7: temp=p->pingjun;break; } if(temp>90&&p->class==k)k1++; elseif(temp>80&&p->class==k)k2++; elseif(temp>60&&p->class==k)k3++; elseif(p->class==k)k4++; p=p->next; } printf("\n%d班优秀: %d人良好: %d人及格: %d人不及格: %d人.\n",k,k1,k2,k3,k4); } /*插入函数*/ intinsert(structstud**h) { structstud*p,*p0; p=(structstud*)malloc(N); /*p指向新申请的节点*/ printf("|-----请输入要插入学生的信息: -----|\n"); printf("学号: "); scanf("%ld",&p->num); {p0=*h; while(p0->next! =NULL&&p0->next->num p0=p0->next; if(p0->next==NULL){;} elseif(p0->next->num==p->num) /*找到重号*/ {free(p);return0;}} printf("姓名: "); scanf("%s",p->name); printf("班级: "); scanf("%d",&p->class); printf("数学成绩: "); scanf("%f",&p->shuxue); printf("物理成绩: "); scanf("%f",&p->wuli); printf("英语成绩: "); scanf("%f",&p->yingyu); printf("计算机成绩: "); scanf("%f",&p->jisuanji); printf("体育成绩: "); scanf("%f",&p->tiyu); printf("历史成绩: "); scanf("%f",&p->lishi); p->zongfen=p->shuxue+p->wuli+p->yingyu+p->jisuanji+p->tiyu+p->lishi; p->pingjun=p->zongfen/6; p->next=NULL; if(*h==NULL){*h=p;return1;} /*头指针为空,p作为新的头指针*//*正确插入返回1*/ p0=*h; /*从头指针开始*/ if(p0->num>p->num) /*找到插入位置在首结点之前*/ { p->next=*h; /*将首节点连接在新节点之后*/ *h=p;return1; /*p作为新的头指针,正确插入返回1*/ } while(p0->next! =NULL&&p0->next->num p0=p0->next; /*继续查找插入位置*/ if(p0->next==NULL){p0->next=p;return1;} /*插入位置在尾节点之后,新节点连接到尾节点之后*/ elseif(p0->next->num==p->num) /*找到重号*/ {free(p);return0;} /*释放新节点的存储空间,不插入返回0*/ p->next=p0->next; /*后续节点连接到新节点之后*/ p0->next=p; /*新节点连接到前驱节点之后*/ return1; } /*删除函数*/ structstud*delete(structstud*h) /*head=delete(&head)*/ { longnum; structstud*p,*p0; intchoice; printf("请输入要删除学生的学号: "); scanf("%ld",&num); p0=h; if(p0->num==num)/*找到要删除的是第一个结点*/ { printf("|***%ld号学生当前信息为: \n\n",num); format1;format2;format1; printf("|%-3d| %-14s|%-4d|%-4.0f|%-4.0f|%-4.0f|%-6.0f|%-4.0f|%-4.0f|%-4.0f|%-5.1f|\n",p0->num,p0->name,p0->class,p0->shuxue,p0->wuli,p0->yingyu,p0->jisuanji,p0->tiyu,p0->lishi,p0->zongfen,p0->pingjun); format1; printf("\n确认删除? 1.是/2.否: "); scanf("%d",&choice); switch(choice) { case1: h=p0->next; /*修改头指针*/ free(p0); /*释放存储空间*/ printf("成功删除%ld号学生数据。 \n",num);returnh;/*正确删除返回h*/ break; case2: printf("删除已放弃.\n");returnh;break; default: printf("错误选择! ");returnh;break; /*放弃删除和错误选择数据不变也返回h*/ } } p=p0->next; while(p! =NULL) { if(p->num==num)/*找到要删除的结点*/ { printf("|***%ld号学生当前信息为: \n\n",num); format1;format2;format1;format3;format1; printf("\n确认删除? 1.是/2.否: "); scanf("%d",&choice); switch(choice) {case1: p0->next=p->next;/*后续节点连接到前驱结点之后*/ free(p); printf("成功删除%ld号学生数据。 \n",num);returnh; break; case2: printf("删除已放弃.\n");returnh;break; default: printf("错误选择! ");returnh;break; } } p0=p; p=p->next; /*继续后移查找*/ } {printf("数据不存在,删除失败。 \n");returnh;} } /*修改函数*/ voidrevise(structstud*p) { intchoice,k=1; longnum; printf("|***请输入要修改学生的学号: "); scanf("%ld",&num); while(p! =NULL) { if(p->num==num)/*找到该结点*/ { k=0;/*为后面的if语句判断用*/ do{ system("cls"); printf("|***%ld号学生当前信息为: \n\n",num); format1;format2;format1;format3;format1; printf("\n请选择要修改的内容: \n"); printf("\n|***1.姓名"); printf("\n|***2.班级"); printf("\n|***3.数学成绩"); printf("\n|***4.物理成绩"); printf("\n|***5.英语成绩"); printf("\n|***6.计算机成绩"); printf("\n|***7.体育成绩"); printf("\n|***8.历史成绩"); printf("\n|***9.返回主菜单"); printf("\n\t\t\t请选择(1-9): "); scanf("%d",&choice); switch(choice) { case1: printf("请输入修改后的姓名: "); scanf("%s",p->name); break; case2: printf("请输入修改后的班级: "); scanf("%d",&p->class); break; case3: printf("请输入修改后的数学成绩: "); scanf("%f",&p->shuxue); p->zongfen=p->shuxue+p->wuli+p->yingyu+p->jisuanji+p->tiyu+p->lishi; p->pingjun=p->zongfen/6;/*计算总分和平均分*/ break; case4: printf("请输入修改后的物理成绩: "); scanf("%f",&p->wuli); p->zongfen=p->shuxue+p->wuli+p->yingyu+p->jisuanji+p->tiyu+p->lishi; p->pingjun=p->zongfen/6; break; case5: printf("请输入修改后的英语成绩: "); scanf("%f",&p->yingyu); p->zongfen=p->shuxue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言本科课程设计 小型学生成绩系统 语言 本科 课程设计 小型 学生 成绩 系统