问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

大一前半学期c语言课程设计报告

发布网友 发布时间:2022-04-27 07:51

我来回答

4个回答

热心网友 时间:2022-06-28 18:22

我这有个学生成绩管理系统的c程序 是去年我们的设计题目给你参考一下啦 感觉都一个样了基本相同 这个设计嘛 还是要自己写的 只有这样菜可以学好c的,而且c语言很有用的是语言学的基础。像人家清华大学的c语言课就三节一学期下来,到后来每个人都有几个这样的课程设计题目,好几百行的他们都能编出来,不是他们聪明,当然肯定不笨了...所以啊都是个氛围和兴趣的问题了。多参考参考是对的,在图书馆借几本相关的书籍看看,上网查查,但不要复制别人的就可以了.....

这个给你参考一下吧
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>

typedef struct STUDENT
{
char studentNumber[10];/*学生学号*/
char studentName[20];/*学生姓名*/
char className[20];/*班级名称*/
float mark1;/*第1门成绩*/
float mark2;/*第2门成绩*/
float mark3;/*第3门成绩*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用于接受用户的选择*/
/*主函数*/
main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函数功能:从文件中读学生信息到链表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)
{
STUDENT *p;
printf("-------请选择相应功能------------\n\n");
printf("| 1 显示所有学生的信息 |\n");
printf("| 2 按姓名查询 |\n");
printf("| 3 按学号查询 |\n");
printf("| 4 增加学生 |\n");
printf("| 5 删除学生 |\n");
printf("| 6 按姓名修改学生成绩 |\n");
printf("| 7 按学号修改学生成绩 |\n");
printf("| 8 保存所有学生信息 |\n");
printf("| 9 显示优秀和不及格学生成绩 |\n");
printf("| 10 排序结果并输出绩 |\n");
printf("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:
OutputInformation();/*显示所有学生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/
break;
case 4:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/
break;
case 6:
ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/
break;
case 7:
ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/
break;
case 8:
SaveLinkToFile();/*保存数据*/
break;
case 9:
DesplayMarkSegment();/*显示各分数段的学生成绩*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*递归调用*/
}
/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/************************************
函数功能:申请一个新结点,并将其初始化
************************************/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/************************************
函数功能:取得用户输入的学生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("请输入学生学号:\n");
scanf("%s",t->studentNumber);
printf("请输入学生姓名:\n");
scanf("%s",t->studentName);
printf("请输入该生所在班级:\n");
scanf("%s",t->className);
printf("请输入第1门成绩:\n");
scanf("%f",&(t->mark1));
printf("请输入第2门成绩:\n");
scanf("%f",&(t->mark2));
printf("请输入第3门成绩:\n");
scanf("%f",&(t->mark3));
}
/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/************************************
函数功能:根据用户输入的学生姓名显示该学生的信息
************************************/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据用户输入的学号显示该学生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/************************************
函数功能:根据用户输入的学号删除该学生
************************************/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("请输入要删除的学生学号:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该学号的学生\n");
return;
}
printf("成功删除\n");
}
/************************************
函数功能:显示所有学生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/************************************
函数功能:根据输入的姓名修改成绩
************************************/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的学生\n",studentName);
}
/************************************
函数功能:根据输入的学号修改成绩
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("请输入学生学号:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("请输入新的第1门成绩:\n");
scanf("%f",&mark1);
printf("请输入新的第2门成绩:\n");
scanf("%f",&mark2);
printf("请输入新的第3门成绩:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学号为 %s 的学生\n",studentNumber);
}
/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("现在没有学生信息,请先输入学生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/************************************
函数功能:显示优秀和不及格学生成绩
************************************/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就认为该生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("不及格的学生一共有%d人\n",count);
p=headLink->next;
printf("成绩优秀的学生成绩如下:\n");
printf("学号\t姓名\t班级\t成绩1\t成绩1\t成绩3\t总成绩\t平均成绩\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("成绩优秀的学生一共有%d人\n",count);
}
/************************************
函数功能:按总成绩排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没学生信息,请先输入学生信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;

strcpy(q->studentNumber,p->studentNumber);/*再复制p结点信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}

祝你学好c语言。我不是冲着分来的,看看悬赏0我也这么详细,就是想让你能好好认识到什么是大学的真谛,这样的实践菜能让你逐渐成熟!

热心网友 时间:2022-06-28 18:23

我感觉你还是自己尝试着做一下吧,这道题目挺简单的,你要是还没有学数据结构的话可以用数组来做,使用数组来做时为了可以支持不同学生人数的计算可以一开始让用户输入要处理的学生的数目,使用malloc函数来动态的申请合适大小的数组。

学习编程就是要实践,要多写程序,这种题目最好自己来做。别人的代码给你很简单的,但是你就损失了一个锻炼自己能力的机会。

热心网友 时间:2022-06-28 18:23

http://hi.baidu.com/ryw12403/blog/item/6864c138dacdee23b9998f16.html

热心网友 时间:2022-06-28 18:24

分文不给,虽然简单,但是看着就讨厌,给些分,我就干。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人字梯有什么安全隐患吗 怎样激发青春期孩子的内驱力 如何激发青春期孩子的内驱力 ...小题1:移船相近邀相见,添酒回灯重开宴。 , &amp;n... L1和L2串联 电压表并联在L1两端 当L1断路后 电压表测的为什么就成了电源... L1和L2串联,用电压表测L1两端的电压,L2不亮时,电流表为什么测的是电源电... 电路上传连两个灯泡L1与L2电压表测L1电压,当L1短路与断路时电压表情况... 对方拖着不办离婚手续该怎么办 计算机一级电子表格怎么拿分 如何配置思源黑体为latex中文字体? 思源黑体字体怎么安装 C语言课程设计,用c语言设计一户籍管理系统,求所写代码 c语言课程设计报告 C语言课程设计报告(题目:学生成绩管理系统) 风湿免疫病能否治愈呢? 风湿类免疫系统疾病怎么治疗? 风湿免疫病怎么治疗?自生免疫风湿病怎么治疗? 风湿免疫性疾病是怎么回事 职场中要经营好你的朋友圈,朋友圈对职场有什么影响? 漫画都在哪里看? 朋友圈对学生开放吗 风湿免疫科治哪些病 风湿免疫性疾病是怎么回事? 风湿免疫科是什么病 我患有风湿病,想知道风湿和类风湿有哪些不同呢? 风湿免疫科包括哪些疾病?谢谢了,大神帮忙啊 风湿类免疫系统疾病有哪些症状?怎么治疗? 哪里可以免费看漫画APP? 谁知道在哪能免费看漫画 谁能给告诉我在哪可以看免费的漫画? 笔记本电脑如何调整明暗度? OFFICE工具栏怎么变颜色? 怎么改变电脑最下面任务栏的颜色或者恢复最当初的颜色? 任务栏换颜色,应该点什么 两个电脑一个网线怎么实现文件共享? 广州有五什么习俗所以人们叫它什么 广州最著名的城市标识是五只什么动物? 广州被称为五羊城, 是哪五羊噢? 广州为什么称为五羊城? 单独的一个文档怎么实现共享?是否只有放在文件夹内才能共享呢? 我家冰箱后面有电是怎么回事,冰箱也不制冷 广州最著名的城市标识是五只什么动物 win7局域网内怎么实现文件夹资源共享 广州为什么叫五羊城,分别是哪五羊 广州叫五羊城的来历是什么? 广州被人们叫五羊城,为什么会有这样一个称号? 广州“五大名园”指的是哪五个园??? 广州五中是重点中学吗? 广州的“五类车”指什么车 广州为什么叫五羊城啊? 广州五羊城的说法、是怎么来的?