c语言学生成绩管理系统课程设计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言学生成绩管理系统课程设计相关的知识,希望对你有一定的参考价值。
《程序设计基础(C语言)》课程综合实训指导书
一、目的、任务及要求
【目的】
《程序设计基础(C语言)》这门课程主要涉及基于C语言的相关程序开发。
学习本门课程主要应掌握C语言程序设计基础、C语言模块化程序设计方法、VC++ 6.0集成开发环境使用方法,学生在了解C语言程序设计基础、掌握VC++ 6.0集成开发环境的使用方法之后,便可采用模块化程序设计方法来进行某些具体应用。本课程综合实训的目的是使学生在平时理论学习、实验实训的基础上,更加全面地了解、掌握基于C语言模块化程序设计开发的方法、技法。
【任务】
以C语言模块化程序设计方法为基础,以VC++ 6.0集成开发环境为工具,实现学生成绩管理系统的设计和开发。
学生成绩管理系统要求实现如下功能:
1、学生信息的录入。如:学生编号、学生姓名、学生成绩。
2、学生信息的查询。如:按学号查询、按成绩查询、显示指定学号的学生成绩、显示所有信息。
3、出错处理。
【要求】
最终提交的内容包括:程序文件、实训报告电子版、实训报告打印版,三者缺一不可。
二、选题的基本原则
通过课程综合实训,把本学期、本学科领域所覆盖及延伸的知识点应用到具体的实例当中,增强学生的动手能力、应用理论的能力以及团队协作能力,复合高职高专的培养目标,能够培养出具有实际动手能力的技能型人才。
三、实施步骤与方法
1.查阅资料、搜集信息:
(1)复习书中相应的知识点;
(2)查阅相应参考书;
(3)上网搜集相关知识。
2.编写相应代码,生成程序文件。
3.撰写课程综合实训报告。
四、成果规范要求
1.本人课程综合实训相应的程序文件。
2.实训报告电子版、打印版(B5纸型,竖版打印,加黄色封皮左侧装订)各一份,具体格式及字号见综合实训模板。
五、成绩评定方法
根据学生实训期间的学习态度、学生完成任务的质量、对所学内容的掌握程度、所编写实训报告的质量进行综合评分,特别提倡开发创新意识,如果能在完成基本要求的基础上,补充并完善了相应的功能,则给予加分。按优秀、良好、中等、及格、不及格五级评定成绩。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 100
struct student
char num[10];
char name[10];
char tel[11];
;
/* 以下是函数原型说明,被调函数的定义在主调函数后面时,要加此部分 */
void myprint();
void mycreate();
void mydisplay();
void mysearch();
/* sch_num与sch_name函数被mysearch调用 */
void sch_num(FILE *fp);
void sch_name(FILE *fp);
void mymodify();
void myadd();
void mydelete();
/* del_num与del_name函数被mydelete调用 */
void del_num(FILE *fp);
void del_name(FILE *fp);
void mysort();
/* sort_num与sort_name函数被mysort调用 */
void sort_num();
void sort_name();
void main()
char choose,yes_no;
do
myprint(); /* 显示主菜单 */
printf(" ");
choose=getch();
switch(choose)
case '1': mycreate(); break; /* 创建 */
case '2': mydisplay(); break; /* 显示 */
case '3': mysearch(); break; /* 查询 */
case '4': mymodify(); break; /* 修改 */
case '5': myadd(); break; /* 添加 */
case '6': mydelete(); break; /* 删除 */
case '7': mysort(); break; /* 排序 */
case '0': break;
default:printf("\n %c为非法选项!\n",choose);
if(choose=='0')
break;
printf("\n 要继续选择吗(Y/N)?\n");
do
yes_no=getch();
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
while(yes_no!='Y'||yes_no!='y');
void myprint() /* 显示菜单界面 */
printf("\n\n\n\n\n\n\n\n");
printf(" |----------------------------|\n");
printf(" | 请输入选项编号(0-7): |\n");
printf(" |----------------------------|\n");
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(" |----------------------------|\n");
/* 定义创建信息管理系统的函数 */
void mycreate()
int i=1;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
printf("\n 请输入第1个记录:\n");
printf(" 学号(用#结束输入):");
do
gets(temp.num);
while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
while(temp.num[0]!='#'&&temp.name[0]!='#'&&temp.tel[0]!='#')
fprintf(fp,"%23s%15s%15s\n",temp.num,temp.name,temp.tel);
i++;
printf("\n 请输入第%d个记录:\n",i);
printf(" 学号(用#结束输入):");
do
gets(temp.num);
while(strcmp(temp.num,"")==0);
printf(" 姓名(用#结束输入):");
gets(temp.name);
printf(" 电话号码(用#结束输入):");
gets(temp.tel);
fclose(fp);
/* 定义显示信息管理系统的函数 */
void mydisplay()
int n=0;
struct student temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
// clrscr();
printf(" 学号 姓名 电话号码\n");
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
n++;
if(n==0)
printf("\n 文件中无记录!\n");
else
printf("\n 文件中共有%d个记录!\n",n);
fclose(fp);
/* 定义查询信息管理系统的函数 */
void mysearch()
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
printf("\n 按学号查询(h),还是按姓名查询(m)?");
c=getch();
if(c=='h'||c=='H')
sch_num(fp); /* 按学号查询 */
if(c=='m'||c=='M')
sch_name(fp); /* 按姓名查询 */
else
printf("\n 非法字符!\n");
fclose(fp);
/* 定义按学号查询信息管理系统的函数 */
void sch_num(FILE *fp)
int flag=0,n=0;
char tempnum[10];
struct student temp;
printf("\n 请输入要查询记录的学号:");
gets(tempnum);
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempnum,temp.num)==0)
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
n++;
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
/* 定义按姓名查询信息管理系统的函数 */
void sch_name(FILE *fp)
int flag=0,n=0;
char tempname[10];
struct student temp;
printf("\n 请输入要查询记录的姓名:");
gets(tempname);
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",&temp.num,&temp.name,&temp.tel);
if(strcmp(tempname,temp.name)==0)
if(flag==0)
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",temp.num,temp.name,temp.tel);
flag=1;
n++;
if(n==0)
printf("\n 文件中无记录!\n");
else
if(flag==0)
printf("\n 文件中无此人!\n");
/* 定义修改信息管理系统的函数 */
void mymodify()
char c;
int n=0;
struct student *find,temp,record[100],*p; /* 最多100个记录 */
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
if(n==0)
printf("\n 文件中无记录!\n");
return;
printf("\n 请输入要修改记录的学号:");
gets(temp.num);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
find=p; /* find记住修改记录的位置 */
break;
if(p==record+n)
printf("\n 无此人!\n");
return;
do
printf("\n 请输入正确的学号:");
do
gets(temp.num);
while(strcmp(temp.num,"")==0);
printf(" 请输入正确的姓名:");
gets(temp.name);
printf(" 请输入正确的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if((strcmp(temp.num,p->num)==0)&&(p!=find))
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
c=getch();
while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
if(p==record+n)
*find=temp; /* find指向需要修改记录的位置 */
break;
while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
/* 定义添加信息管理系统的函数 */
void myadd()
char c;
int n=0;
struct student temp,record[N],*p;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
do
printf("\n 请输入新记录的学号:");
do
gets(temp.num);
while(strcmp(temp.num,"")==0);
printf(" 请输入新记录的姓名:");
gets(temp.name);
printf(" 请输入新记录的电话号码:");
gets(temp.tel);
for(p=record;p<record+n;p++)
if(strcmp(temp.num,p->num)==0)
printf("\n 学号重复,要重新输入吗(Y/N)?");
do
c=getch();
while(c!='Y'&&c!='y'&&c!='N'&&c!='n');
putchar('\n');
break;
if(p==record+n)
*p=temp;
break;
while(c=='Y'||c=='y');
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n+1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
/* 定义删除信息管理系统的函数 */
void mydelete()
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
printf("\n 按学号删除(h),还是按姓名删除(m)?");
c=getch();
if(c=='h'||c=='H')
del_num(fp); /* 按学号删除 */
if(c=='m'||c=='M')
del_name(fp); /* 按姓名删 */
else
printf("\n 非法字符!\n");
fclose(fp);
/* 定义按学号删除信息管理系统的函数 */
void del_num(FILE *fp)
int n=0;
char tempnum[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
printf("\n 请输入要删除记录的学号:");
gets(tempnum);
for(k=record;k<record+n;k++)
if(strcmp(tempnum,k->num)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
/* 定义按姓名删除信息管理系统的函数 */
void del_name(FILE *fp)
int n=0;
char tempname[10];
struct student record[N],*p,*k;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
printf("\n 请输入要删除记录的姓名:");
gets(tempname);
for(k=record;k<record+n;k++)
if(strcmp(tempname,k->name)==0)
break; /* 找到要删记录结束循环 */
if(k<record+n) /* 提前结束循环,说明找到人 */
for(p=k;p<k+n-1;p++) /* 向左移一位,相当于删除记录 */
*p=*(p+1);
else
printf("\n 无此人!\n");
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n-1;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
/* 定义排序信息管理系统的函数 */
void mysort()
char c;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
fclose(fp);
printf("\n 按学号排序(h),还是按姓名排序(m)?");
c=getch();
if(c=='h'||c=='H')
sort_num(); /* 按学号排序 */
if(c=='m'||c=='M')
sort_name(); /* 按姓名排序 */
else
printf("\n 非法字符!\n");
/* 定义按学号排序信息管理系统的函数 */
void sort_num()
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按学号的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
else
if(c=='j'||c=='J') /* 按学号的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->num,(p+j)->num)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
else
printf("\n 非法字符!\n");
return;
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
printf("%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
/* 定义按姓名排序信息管理系统的函数 */
void sort_name()
int i,j,k,n=0;
char c;
struct student record[N],*p,temp;
FILE *fp;
fp=fopen("d:\\lbh\\guanli.dat","r+");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
p=record;
while(feof(fp)==0)
fscanf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
p++;
n++;
fclose(fp);
printf("\n 按升序(s),还是按降序(j)?");
c=getch();
if(c=='s'||c=='S') /* 按姓名的升序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)>0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
else
if(c=='j'||c=='J') /* 按姓名的降序排列 */
for(i=0;i<n-1;i++) /* 选择法排序 */
k=i;
for(j=i+1;j<n;j++)
if(strcmp((p+k)->name,(p+j)->name)<0)
k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
else
printf("\n 非法字符!\n");
return;
fp=fopen("d:\\lbh\\guanli.dat","w");
if(fp==NULL)
printf("\n 打开文件失败!\n");
return;
for(p=record;p<record+n;p++)
fprintf(fp,"%23s%15s%15s\n",p->num,p->name,p->tel);
fclose(fp);
参考技术A 我有一个类似的,有你说的一
#include<stdio.h>
main()
int i,j;
float s;
struct stu5
long num;
char name[20];
float score[3];
float ave;
a[3];
for(i=0;i<3;i++)
printf("请输入学号,姓名\n");
scanf("%ld,%s",&a[i].num,a[i].name);
printf("请输入3科分数\n");
for(j=0;j<3;j++)
scanf("%f",&a[i].score[j]);
for(i=0;i<3;i++)
s=0.0;
for(j=0;j<3;j++)
s=s+a[i].score[j];
a[i].ave=s/3.0;
for(i=0;i<3;i++)
printf("no:%2d num:%ld name:%s ave:%4.1f\n",i,a[i].num,a[i].name,a[i].ave);
getch();
#include<stdio.h>
main()
int i,j;
float s;
struct stu5
long num;
char name[20];
float score[3];
float ave;
a[3];
for(i=0;i<3;i++)
printf("??ê?è??§o? ");
scanf("%ld,%s",&a[i].num);
printf("D???\n");
scanf("%s",a[i].name);
printf("??ê?è?3??·?êy\n");
for(j=0;j<3;j++)
scanf("%f",&a[i].score[j]);
for(i=0;i<3;i++)
s=0.0;
for(j=0;j<3;j++)
s=s+a[i].score[j];
a[i].ave=s/3;
for(i=0;i<3;i++)
printf("no:%2d num:%ld name:%s ave:%4.1f\n",i,a[i].num,a[i].name,a[i].ave);
在你发给我的基础上加上头文件#include<stdio.h>,第二个for循环的判断条件改为j<3,在运行程序时,所输入的学号和姓名之间加一个逗号
半功能,后面在家爱一点就是了。 参考技术B 败笔网络安全小组,中国最大的C语言编程论坛
建议你上那学习C语言吧
参考资料:败笔网络安全小组
参考技术C 加我的 QQ 我公告诉你吧 参考技术D 比较麻烦哟、、这个没有几天搞不出来呀、、上次搞一个ATM模拟系统搞了三天、、特别是有界面的,函数调用比较麻烦,而且考虑的情况也很多、、后天迟不迟?、、不过我建议你自己尝试吧、、真的,如果你不尝试着自己做出来,以后你遇到这些都不懂的,但是如果这个系统你能做出来,你遇到其他要求有界面的都会一理通百理明、、我的ATM模拟系统、、课程设计:学生成绩管理系统!400行C语言源码分享
近期很多小伙伴私信我说,临近期末考试,需要一份课程设计:学生成绩管理系统来交作业!
今天,它来了!400行源码的学生管理系统,只需要你正确移植到你的电脑上,即可使用,这还不点个关注+收藏嘛!
源码分享:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char filename[20] = { 0 };
typedef struct Student{
int num;
char name[10];
float chinese;
float math;
float english;
float total;
struct Student* next;
}STU;
int MainInterface() {
int key;
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 欢迎来到学生成绩管理系统 |\\n");
printf("\\t\\t\\t|===========================================|\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 1.录入学员 |\\n");
printf("\\t\\t\\t| 2.查找学员 |\\n");
printf("\\t\\t\\t| 3.删除学员 |\\n");
printf("\\t\\t\\t| 4.修改成绩 |\\n");
printf("\\t\\t\\t| 5.打开文件 |\\n");
printf("\\t\\t\\t| 0.退出系统 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请选择:");
scanf("%d", &key);
return key;
}
STU* CreateList(){
STU* p = (STU*)malloc(sizeof(STU));
if (p != NULL)
p->next = NULL;
return p;
}
int NumIsExist(STU* plist, int num) {
plist = plist->next;
while (plist != NULL)
{
if (plist->num == num)
return 1;
plist = plist->next;
}
return 0;
}
void InsertStu(STU* plist){
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在录入学员信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
STU* p = plist;
int count = 0;
printf("\\t\\t\\t请问需要添加多少学员:");
scanf("%d",&count);
if (count <= 0)
return;
for (int i = 0; i < count; i++) {
STU* pnew = (STU*)malloc(sizeof(STU));
if (pnew == NULL) return;
printf("\\t\\t\\t请输入学生学号:");
scanf("%d", &pnew->num);
while (1)
{
if (NumIsExist(plist, pnew->num))
{
printf("\\t\\t\\t学号重复,请重新输入学号:");
scanf("%d", &pnew->num);
}
else
break;
}
printf("\\t\\t\\t请输入学生姓名:");
scanf("%s", pnew->name);
printf("\\t\\t\\t请输入语文成绩:");
scanf("%f", &pnew->chinese);
printf("\\t\\t\\t请输入数学成绩:");
scanf("%f", &pnew->math);
printf("\\t\\t\\t请输入英语成绩:");
scanf("%f", &pnew->english);
pnew->total = pnew->chinese + pnew->math + pnew->english;
pnew->next = NULL;
//头插法? 尾插法? 任意位置插入?
p = plist;
while (p->next != NULL)
{
if (pnew->num < p->next->num)
{
pnew->next = p->next;
p->next = pnew;
break;
}
p=p->next;
}
p->next = pnew;
}
}
void SerchByNum(STU* plist){
int num = 0;
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在查找学员信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请输入学员学号:");
scanf("%d", &num);
while (plist != NULL)
{
if (plist->num == num)
{
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
plist->num, plist->name, plist->chinese,
plist->math, plist->english,plist->total);
printf("\\t\\t\\t");
system("pause");
return;
}
plist = plist->next;
}
printf("\\t\\t\\t没有找到该学生!!\\n");
printf("\\t\\t\\t");
system("pause");
}
void SerchByName(STU* plist){
char name[10] = { 0 };
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在查找学员信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请输入学员姓名:");
scanf("%s", &name);
int n = 1;
while (plist != NULL)
{
if (strcmp(name, plist->name) == 0)
{
if (n) {
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
n = 0;
}
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
plist->num, plist->name, plist->chinese,
plist->math, plist->english, plist->total);
}
plist = plist->next;
}
if (n)
printf("\\t\\t\\t没有找到该学生!!\\n");
printf("\\t\\t\\t");
system("pause");
}
void SerchAllStu(STU* plist) {
plist = plist->next;
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在查找学员信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
if (plist == NULL)
{
printf("\\t\\t\\t没有学员信息!\\n");
printf("\\t\\t\\t");
system("pause");
return;
}
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
while (plist != NULL)
{
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
plist->num, plist->name, plist->chinese,
plist->math, plist->english, plist->total);
plist = plist->next;
}
printf("\\t\\t\\t");
system("pause");
}
void SerchMain(STU* plist) {
int key;
do {
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在查找学员信息 |\\n");
printf("\\t\\t\\t|===========================================|\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 1.按学号查找 |\\n");
printf("\\t\\t\\t| 2.按姓名查找 |\\n");
printf("\\t\\t\\t| 3.查看所有项 |\\n");
printf("\\t\\t\\t| 0.返回主菜单 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请选择:");
scanf("%d", &key);
switch (key) {
case 1:SerchByNum(plist); break;
case 2:SerchByName(plist); break;
case 3:SerchAllStu(plist); break;
}
} while (key != 0);
}
void DeleteStu(STU* plist){
int num = 0;
char key = '\\0';
STU* pre = plist;
STU* p = plist->next;
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在准备删除信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请输入需要删除的学号:");
scanf("%d", &num);
while (p != NULL)
{
if (p -> num == num)
{
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
p->num, p->name, p->chinese,
p->math, p->english, p->total);
printf("\\t\\t\\t是否删除? [Y/N] : ");
getchar();
scanf("%c",&key);
if (key == 'N' || key == 'n')
return;
else if(key == 'Y' || key == 'y')
{
pre->next = p->next;
free(p);
p = NULL;
printf("\\t\\t\\t删除成功!!\\n");
printf("\\t\\t\\t");
system("pause");
return;
}
}
pre = pre->next;
p = p->next;
}
printf("\\t\\t\\t没有找到该学生!!\\n");
printf("\\t\\t\\t");
system("pause");
}
void ModifyStu(STU* plist) {
int num = 0;
STU* p = plist->next;
char key = '\\0';
system("cls");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 正在准备修改信息 |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请输入需要修改的学号:");
scanf("%d", &num);
while (p != NULL)
{
if (num == p->num)
{
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
p->num, p->name, p->chinese,
p->math, p->english, p->total);
printf("\\t\\t\\t是否修改? [Y/N] : ");
getchar();
scanf("%c", &key);
if (key == 'N' || key == 'n')
return;
else if (key == 'Y' || key == 'y')
{
printf("\\n\\t\\t\\t==============\\n");
printf("\\t\\t\\t1.修改姓名\\n\\t\\t\\t2.修改语文\\n\\t\\t\\t3.修改数学\\n\\t\\t\\t4.修改英语\\n\\t\\t\\t0.返回\\n");
printf("\\t\\t\\t==============\\n");
printf("\\t\\t\\t请选择:");
getchar();
scanf("%c", &key);
if (key == '1') {
printf("\\t\\t\\t新的姓名:");
scanf("%s", p->name);
}
else if (key == '2') {
printf("\\t\\t\\t新的语文成绩:");
scanf("%f", &p->chinese);
}
else if (key == '3') {
printf("\\t\\t\\t新的数学成绩:");
scanf("%f", &p->math);
}
else if (key == '4') {
printf("\\t\\t\\t新的英语成绩:");
scanf("%f", &p->english);
}
else if (key == '0') return;
printf("\\t\\t\\t修改后的信息如下:\\n");
printf("\\t\\t\\t学号\\t姓名\\t语文\\t数学\\t英语\\t总分\\n");
printf("\\t\\t\\t%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
p->num, p->name, p->chinese,
p->math, p->english, p->total);
printf("\\t\\t\\t");
system("pause");
return;
}
}
p = p->next;
}
printf("\\t\\t\\t没有找到该学员!!\\n");
printf("\\t\\t\\t");
system("pause");
}
STU* OpenStuFile() {
char c;
STU* pstu = NULL;
STU* ptem = NULL;
FILE* fp = NULL;
while (1){
system("cls");
printf("\\n\\n");
printf("\\n\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t| 欢迎来到学生成绩管理系统 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 【源码联系群中老师】 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 【源码联系群中老师】 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 【源码联系群中老师】 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t| 【学编程,来顿开】 |\\n");
printf("\\t\\t\\t| |\\n");
printf("\\t\\t\\t=============================================\\n");
printf("\\t\\t\\t请输入班级(如:3年2班):");
scanf("%s", filename);
fp = fopen(filename, "rb+");
if (fp != NULL) break; //打开成功
printf("\\t\\t\\t文件不存在!是否创建该文件? [Y/N] : ");
getchar();
scanf("%c", &c);
if (c == 'Y' || c == 'y')
{
fp = fopen(filename, "wb+");
if (fp != NULL)
break;
else
continue;
}
else
continue;
}
pstu = CreateList();
while (1)
{
STU* pnew = (STU*)malloc(sizeof(STU));
pnew->next = NULL;
if (fscanf(fp, "%d\\t%s\\t%f\\t%f\\t%f\\t%f\\n",
&pnew->num, pnew->name, &pnew->chinese,
&pnew->math, &pnew->english, &pnew->total) == EOF)
{
free(pnew);
pnew = NULL;
break;
}
//头插法? 尾插法? 任意位置插入?
ptem = pstu;
while (ptem->next != NULL)
{
if (pnew->num < ptem->next->num)
{
pnew->next = ptem->next;
ptem->next = pnew;
break;
}
ptem = ptem->next;
}
ptem->next = pnew;
}
fclose(fp);
return pstu;
}
void CloseStuFile(STU* plist){
FILE* fp = NULL;
plist = plist->next;
//只写方式打开文件
if ((fp = fopen(filename, "wb+")) == NULL)
{
printf("打开文件失败!");
}
else
{
//遍历链表输出到文件
while (plist != NULL)
{
fprintf(fp,"%d\\t%s\\t%.1f\\t%.1f\\t%.1f\\t%.1f\\n",
plist->num, plist->name, plist->chinese,
plist->math, plist->english, plist->total);
plist = plist->next;
}
}
fclose(fp);
}
int main(){
int key = -1;
STU* pList = NULL;
pList = OpenStuFile(); //初始化链表
while (key != 0) {
key = MainInterface();
switch (key) {
case 1: InsertStu(pList); break;
case 2: SerchMain(pList); break;
case 3: DeleteStu(pList); break;
case 4:ModifyStu(pList); break;
case 0:CloseStuFile(pList); break;
}
}
return 0;
}
好了,赶紧去完成你的课程设计吧!不要忘了留下你的关注和点赞哟~
另外,对现在我们的大多数朋友来说还是学编程技术最重要!栽一棵树最好的时间是十年前,其次是现在。对于准备学习编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
C语言C++编程学习交流圈子,QQ群:981108780【点击进入】微信公众号:C语言编程学习基地
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
编程学习书籍分享:
编程学习视频分享:
以上是关于c语言学生成绩管理系统课程设计的主要内容,如果未能解决你的问题,请参考以下文章