当前位置:首页 » 考试成绩 » 单链表怎么编写一个学生成绩表

单链表怎么编写一个学生成绩表

发布时间: 2021-01-15 14:41:24

㈠ 求:(C语言)用链表编写学生考试成绩单(其中包含学号,姓名,性别,出生年月,5门课程的成绩)

struct students
{
char num[7];
char name[20];
int scores[3];
float ave;
float max;
};
main()
{
struct students stu[5];
int m,n,i=0;
float sum,max=0;
for(m=0;m<5;m++)
{
printf("input the No:%d student's:\n",m+1);
printf("school_num name:\n");
scanf("%s%s",stu[m].num,stu[m].name);
printf("Scores of subject:\n");
for(n=0;n<4;n++)
{
scanf("%d",&stu[m].scores[n]);
}
}
for(m=0;m<5;m++)
{
sum=0;
for(n=0;n<4;n++)
{
sum+=stu[m].scores[n];
stu[m].ave=sum/3.0;
}
printf("%s'saverage is %5.2f.\n",stu[m].name,stu[m].ave);
}
for(m=0;m<5;m++)
{
if(stu[m].ave>max)
{
max=stu[m].ave;
i=m;
}
}
printf("%s %s's the max is %5.2f.\n",stu[i].num,stu[i].name,stu[i].ave);

for(n=0;n<4;n++)
{
printf("%-5d",stu[i].scores[n]);
}
}

㈡ 编写一个学生成绩管理程序 c++ 链表

#include<iostream>
#include<string>
using namespace std;
//=============<开始定义结构体>===================================================
struct combox{

int num;
int mark;
string name;
combox *next;

};
//=============<结束定义结构体>===================================================

//=============<开始定义Commonbox类>==============================================

//-----类体开始------------------------
class Commonbox{

private:
combox *head;
void Swap(combox *,combox *); //交换两个combox变量的数据域
void Print(combox *); //输出一combox指定的记录
combox *Find(int); //查找条例条件的记录,并返回该记录的指针

public:
Commonbox(){head=NULL;}
int ListCount(); //统计当前链表的记录总数,返回一个整数
void AddItem(int num, string name, int mark); //添加一条记录到表尾
void RemoveItem(int); //删除一条指定的记录
void List(); //列出当前链表中的所有记录
void Sort(); //对当前链表进行排序
void Search(int); //在当前链表查找指定记录并输出
float Average(); //计算平均成绩
};
//-----类体结束------------------------

//-----类成员函数开始----------------------------------
int Commonbox::ListCount(){//统计当前链表的记录总数,返回一个整数

if(! head)return 0;
combox *p=head;
int n=0;
while(p){
n++;
p=p->next;
}
return n;

}

void Commonbox::AddItem(int num, string name, int mark){//添加一条记录到表尾

if(! head){
head=new combox;
head->mark=mark;
head->num=num;
head->name=name;
head->next=NULL;
return;
}

combox *t=head;
while(t && t->num!=num)
t=t->next;

if(t){
cout<<"操作失败:学号为"<<num<<"的记录已经存在!"<<endl;
return;
}

combox *p=head;
while(p->next)p=p->next;
combox *p1=new combox;
p1->num=num;
p1->mark=mark;
p1->name=name;
p1->next=NULL;
p->next=p1;

return;
}

void Commonbox::RemoveItem(int num){//删除一条指定的记录

combox *t=Find(num);
if(! t)return;

combox *p=head;

//如果要删除的记录位于表头
if(head==t){
head=head->next;
delete p;
cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;
return;
}

while(p->next!=t)p=p->next;
combox *p1=p->next;
p->next=p1->next;
delete p1;
cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;

return;
}

void Commonbox::Print(combox *p){//输出一combox指定的记录

cout<p->num<<"\t\t";
cout<<p->name<<"\t\t";
cout<<p->mark<<endl;

return;
}

void Commonbox::List(){//列出当前链表中的所有记录

if (ListCount==0){
cout <"错误:当前的列表为空!"<<endl;
return;
}

combox *p=head;
cout<"共有记录:"<<ListCount()<endl;
cout<"学号\t\t姓名\t\t分数"<<endl;
while(p){
Print(p);
p=p->next;
}
cout <<endl;
return;
}

void Commonbox::Search(int num){//在当前链表查找指定记录并输出

cout <"Searching...."<<endl;

combox *p=Find(num);
if(p){
cout<"学号\t\t姓名\t\t分数"<<endl;
Print(p);
}
cout <endl;
}

combox *Commonbox::Find(int num){

if (ListCount()==0){
cout <"错误:当前的列表为空!"<<endl;
return NULL;
}

combox *p=head;
while(p){
if(p->num==num)break;
p=p->next;
}

if(! p){
cout <<"错误:找不到该记录!\n";
return NULL;
}

return p;
}

void Commonbox::Swap(combox *p1, combox *p2){//交换两个combox变量的数据域

combox *temp=new combox;
temp->num=p1->num;
temp->mark=p1->mark;
temp->name=p1->name;

p1->num=p2->num;
p1->mark=p2->mark;
p1->name=p2->name;

p2->num=temp->num;
p2->mark=temp->mark;
p2->name=temp->name;

}

void Commonbox::Sort(){//对当前链表进行排序
cout <<"Sorting..."<<endl;
if(ListCount()2) return;

combox *temp=NULL,*p=NULL,*p1=NULL,*p2=NULL,*k=NULL;
int n=ListCount(),i,j;

p=head;
for(i=1;i<n;i++){
k=p;
p1=p->next;
for(j=0;j<n-i;j++){
if(k->num > p1->num){
k=p1;
}
p1=p1->next;
}
if(p!=k)Swap(k,p);
p=p->next;
}
cout <<"Complete successfully!"<<endl<<endl;
return;
}

float Commonbox::Average(){ //计算平均成绩

if (ListCount()==0){
cout <"错误:当前的列表为空!"<<endl;
return -1;
}
int sum=0,n=0;
combox *p=head;
while(p){
sum += p->mark;
p=p->next;
n++;
}
return float(sum)/n;
}
//-----类成员函数结束----------------------------------

//=============<结束定义Commonbox类>==============================================

Commonbox student; //定义全局变量

int Menu(){
cout <<"===========[主选单:]==========="<<endl;
int n=1,select=-1;
cout <n++<".输入学生成绩;"<<endl<<endl;
cout <n++<".按学号排序;"<<endl<<endl;
cout <n++<".按学号查找记录;"<<endl<<endl;
cout <n++<".删除由学号指定的记录;"<<endl<<endl;
cout <n++<".列出所有记录;"<<endl<<endl;
cout <n++<".计算平均成绩;"<<endl<<endl;
cout <"0.退出;"<<endl<<endl;

cout <"[请选择(输入相应数字)]:";
cin >>select;
return select;
}

char Exit(){ //返回一个字符患,用于确认退出
char s;
cout<<"确定要退出程序吗?[Y/N]:";
cin >>s;
return s;
}

void Input(int *num, string *name, int *mark){ //输入学生信息

cout <<"请输入 学号 姓名 分数:";
cin >>*num;
if(*num==-1)return;
cin >>*name>>*mark;

return;
}

void AddNew(){ //增加记录

int num=0,mark=0;
string name="";

cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl;
Input(&num, &name, &mark);
while(num!=-1){
student.AddItem(num,name,mark);
Input(&num, &name, &mark);
}
return;
}

void DoFind(){ //按学号查找

int num;
cout<endl<<"当输入的学号为-1时表示结束输入."<<endl;
do{
cout <"请输入要查找的学生的学号: ";
cin>>num;
if(num==-1)continue;
student.Search(num);
}while(num!=-1);

return;
}

void DoDelete(){ //删除记录

cout<<endl<<"当输入的学号为-1时表示结束输入."<<endl;
int num;
do{
cout <"请输入要删除的学生的学号:";
cin>>num;
if(num==-1)continue;
student.RemoveItem(num);
}while(num!=-1);
return;
}

void ShowAverage(){ //输出平均数

float avr=student.Average();
if(avr>0){
cout<<"共有记录:\t"<<student.ListCount()<endl<<endl;
cout<"平均成绩:\t"<<avr<<endl<<endl;
}
return;
}
//-------******主函数开始>******-------

int main(){

cout<<"Welcome!\n学生成绩管理系统\nVer 1.01\nBy FondBoy\n\n";

int select;
char s;

while(1){
select=Menu();
switch(select){
case 0: //退出程序
s=Exit();
if(s=='y' || s=='Y')return 0;
break;

case 1: //输入学生成绩
AddNew();
break;

case 2: //按学号排序
student.Sort();
break;

case 3: //按学号查找记录
DoFind();
break;

case 4: //删除由学号指定的记录
DoDelete();
break;

case 5: //列出所有记录
student.List();
break;

case 6: //输出平均成绩
ShowAverage();
break;

default:
cout<<"无效输入!"<<endl;
}
}

return 0;
}
//-------******主函数结束>******-------
//------!!!!!!---------EOF-[程序代码结束]-------------------

㈢ c语言:写一个程序建立一个含有学生(学号成绩)数据的单向动态链表(我是个初学者希望可以解释清楚点)

1.n的存在没必要,直接在循环外面将head指向p1
2.新建节点顺序错误。你应该先用p2=malloc(…)分配空间,然后输入数据,最后将p1的next指向p2,最后令p1=p2就行了。之后进行循环

㈣ 用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩

/*
用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,还有三门课比如语,数,外的成绩
*/
//FileName: stuinfo.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SERIALLEN 20
#define COURSENUM 3

typedef struct
{
char course[SERIALLEN];
float score;
}_courseInfo;

typedef struct _stuinfo
{
char serial[SERIALLEN];
char name[SERIALLEN];
char sex[SERIALLEN];
_courseInfo courseInfo[COURSENUM];
struct _stuinfo *next;
}stuinfo;

int main(int argc, char **argv)
{
stuinfo *head=NULL,*ptr=NULL,*s=NULL;
char str[SERIALLEN];
int cycle=1;
int i=0;
memset(str,0,SERIALLEN);
printf("建立学生信息:\n");
head=(stuinfo *)calloc(1,sizeof(stuinfo));
if(!head)
{
perror("申请空间失败,没有足够内存。");
return -1;
}
ptr=head;
while(cycle)
{
puts("输入学生学号(0退出):");
scanf("%s",str);
if(strcmp(str,"0")) //如果学号为0,则退出链表的创建
{
s=(stuinfo *)calloc(1,sizeof(stuinfo));
if(!ptr)
{
perror("申请空间失败,没有足够内存。");
return -1;
}
memset(s->serial,0,SERIALLEN);
strcpy(s->serial,str);
memset(s->name,0,SERIALLEN);
puts("输入姓名:");
scanf("%s",s->name);
memset(s->sex,0,SERIALLEN);
puts("输入性别:");
scanf("%s",s->sex);
for(i=0;i<COURSENUM;i++)
{
memset(s->courseInfo[i].course,0,SERIALLEN);
puts("输入课程名称:");
scanf("%s",s->courseInfo[i].course);
s->courseInfo[i].score=0.0f;
puts("输入课程分数:");
scanf("%f",&(s->courseInfo[i].score));
}

ptr->next=s;
ptr=s;
}
else cycle=0;
}

ptr->next=NULL;
ptr=head;
head=head->next;
free(ptr);
//head=linkSort(head);
ptr=head;
printf("学号\t姓名\t性别");
for(i=0;i<COURSENUM;i++)
printf("\t课程[%d]",i);
printf("\n");
while(ptr!=NULL)
{
printf("%s\t%s\t%s",ptr->serial,ptr->name,ptr->sex);
for(i=0;i<COURSENUM;i++)
printf("\t%s[%.2f]",ptr->courseInfo[i].course,ptr->courseInfo[i].score);
printf("\n");
ptr=ptr->next;
}
return 0;
}

C:\mypro>gcc -g -Wall student.c -o student

C:\mypro>student
建立学生信息:
输入学生学号(0退出):
007
输入姓名:
zxsh
输入性别:
male
输入课程名称:
chinese
输入课程分数:
99
输入课程名称:
phy
输入课程分数:
100
输入课程名称:
english
输入课程分数:
98
输入学生学号(0退出):
002
输入姓名:
pipal
输入性别:
female
输入课程名称:
chem
输入课程分数:
98
输入课程名称:
math
输入课程分数:
97
输入课程名称:
chinese
输入课程分数:
100
输入学生学号(0退出):
0
学号 姓名 性别 课程[0] 课程[1] 课程[2]
007 zxsh male chinese[99.00] phy[100.00] english[98.00]
002 pipal female chem[98.00] math[97.00] chinese[100.00]

C:\mypro>

㈤ 编写一个学生成绩的链表,学生成绩包括:学号、姓名、成绩等三个数据项,是一个复合数据类型。

#include <iostream>
using namespace std;
typedef struct Student
{ //构造一个学生信息的特殊数据类型。
char name[10];
char id[20];
double sorce;
Student *next;
}Student,*StudentLink;
void CreateStudent_S(StudentLink &S,int n=10)
{ //创造一个默认10个学生的链表。
int i=0;
StudentLink p;
cout<<"请你输入"<<n<<"个学生的信息"<<endl;
S=(StudentLink)malloc(sizeof(Student));//创造一个空节点。
S->next=NULL;
while(i<n)
{
p=(StudentLink)malloc(sizeof(Student));//创造一个新的结点。
cout<<"请输入一学生的姓名:"<<endl;
cin>>p->name;
cout<<"请输入一学生的学号:"<<endl;
cin>>p->id;
cout<<"请输入一学生的成绩:"<<endl;
cin>>p->sorce;
p->next=S->next;
S->next=p;
i++;
}
}
void CompareSorce(StudentLink S)
{ //比较各个同学成绩大小,最大者赋值给max,最小的赋值给min.
double max=S->next->sorce,min=S->next->sorce;//最大值和最小值初始值为第一位学生。

while(S->next!=NULL)
{
S=S->next;
if(S->sorce>max)//依次比较各个同学成绩大小,较大者赋值给max,
max=S->sorce;
if(S->sorce<min)//依次比较各个同学成绩大小,较小者赋值给mix,
min=S->sorce;

}
cout<<"这学生10个学生的最高的成绩是:\n"<<max<<endl;
cout<<"这学生10个学生的最低的成绩是:\n"<<min<<endl;

}
void AverageSorce(StudentLink S)
{
double total,average;
while(S->next!=NULL)//计算这十个学生的总分数。
{
S=S->next;
total+=S->sorce;

}
average=total/10;
cout<<"这十个学生的平均成绩为:average="<<average<<endl;

}
void main()
{
StudentLink S;
CreateStudent_S(S);
CompareSorce(S);
AverageSorce(S);

}
不懂之处,可以于我沟通,我的邮箱是[email protected]

㈥ 数据结构单链表应用:编写一个完整的C++语言程序,输入信息:学生的学号,姓名,成绩。(要简单明了)

给你个简单的例子,虽然不是你想要的,你可以把这个看懂,然后改改就可以了
// 链表e.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

/*---------------------结构体定义部分------------------------------*/
struct Node
{
char name[10];
int score;
struct Node *next;
};
typedef struct Node ListNode;

/*---------------------函数声明部分-----------------------------------*/
ListNode* CreateNode(int n);
void PrinfListNode(ListNode *h);
void InsertList(ListNode *h,int i,char name[],int e,int n);
void DeleteList(ListNode *h,int i,int n);
void DisplayNote(void);

/*---------------------函数实现部分-----------------------------------*/

int main(int argc, char* argv[])
{
ListNode *h;
int i=1,n,score;
char name[10];
int *m=0;
cout<<m<<endl;

while(i)
{
DisplayNote();
scanf("%d",&i);
switch(i)
{
case 1:
printf("Please input the number of the list\n");
scanf("%d",&n);
h=CreateNode(n);
printf("List elements is:\n");
PrinfListNode(h);
break;
case 2:
printf("Please input the position of the element:");
scanf("%d",&i);
printf("Please input name of the student:");
scanf("%s",&name);
printf("Please input score of the student:");
scanf("%d",&score);
InsertList(h,i,name,score,n);
printf("List elements is:\n");
PrinfListNode(h);
break;
case 3:
printf("Please input the position of the element:");
scanf("%d",&i);
DeleteList(h,i,n);
printf("List elements is:\n");
PrinfListNode(h);
break;
case 4:
printf("List elements is:\n");
PrinfListNode(h);
break;
case 0:
return 0;
break;
default:
printf("ERROR! Please try again");
}

}
return 0;
}

/*-----------------建立链表函数实现部分-----------------------------------*/
ListNode *CreateNode(int n)
{
ListNode *head;
ListNode *pre,*p;
int i;
head=(ListNode*)malloc(sizeof(ListNode));
head->next=NULL;
pre=head;
for (i=1;i<=n;i++)
{
printf("Please input name of the %d student:",i);
p=(ListNode*)malloc(sizeof(ListNode));
scanf("%s",&p->name);
printf("Please input score of the %d student:",i);
scanf("%d",&p->score);
pre->next=p;
pre=p;
}
p->next=NULL;
return head;
}

/*-----------------输出链表函数实现部分-----------------------------------*/
void PrinfListNode(ListNode *h)
{
ListNode *p;
p=h->next;
while(p)
{
printf("name:%s\tscore:%d",p->name,p->score);
p=p->next;
printf("\n");
}
}

/*-----------------插入链表函数实现部分-----------------------------------*/

void InsertList(ListNode *h,int i,char name[],int e,int n)
{
ListNode *p,*q;
int j;
if (i<1||i>n+1)
{
printf("Error ! Please input again.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=(ListNode *)malloc(sizeof(ListNode));
strcpy(q->name,name);
q->score=e;
q->next=p->next;
p->next=q;
}
}

/*-----------------删除链表函数实现部分-----------------------------------*/
void DeleteList(ListNode *h,int i,int n)
{
ListNode *p,*q;
int j;
char name[10];
int score;
if (i<1||i>n)
{
printf("Error ! Please input again.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
strcpy(name,q->name);
score=q->score;
free(q);
printf("name=%s,score=%d",name,score);
}
}

void DisplayNote(void)
{
printf("1--建立新的链表\n");
printf("2--添加元素\n");
printf("3--删除元素\n");
printf("4--输出当前链表中的内容\n");
printf("0--建立新的链表\n");
}

㈦ 需要一个用(c语言)链表编写的学生成绩管理系统

你上面要求的基本功能大多都有,但根据性别这一功能你自己改一下就行了。

下载的网盘地址:网页链接pan..com/s/1c1740u8

㈧ C语言 建立一个动态学生成绩的链表,

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char() num[10];/* 学号 */
char() name[20];
char() sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新时间 */
};

typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;

void menu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n");
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}

void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n");
}

void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n");
}

void printc() /* 本函数用于输出中文 */
{
printf(" 学号\t 姓名 性别 英语成绩 数学成绩 C语言成绩 总分 平均分\n");
}

void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}

void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 将指针置于最末尾 */
while(1)
{
printf("请你输入学号(以'0'返回上一级菜单:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.num,num);
printf("请你输入姓名:");
scanf("%s",p->data.name);
getchar()();
printf("请你输入性别:");
scanf("%s",p->data.sex);
getchar()();
printf("请你输入c语言成绩:");
scanf("%d",&p->data.cgrade);
getchar()();
printf("请你输入数学成绩:");
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入英语成绩:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息输入已经完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;

}
}

void Qur(Link l) /* 查询学生 */
{
int sel;
char findmess[20];
Node *p;

if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n");
return;

}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 删除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("请你输入要删除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:该学生已经成功删除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n");
return;
}
printf("请你输入要修改的学生学号:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num);
scanf("%s",p->data.num);
printf("请你输入新姓名(原来是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别(原来是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("请你输入新的c语言成绩(原来是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("请你输入新的数学成绩(原来是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("请你输入新的英语成绩(原来是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:资料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:没有资料可以显示!\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:没有资料可以统计!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------统计结果--------------------------------\n");
printf("总分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英语最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("数学最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c语言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用于做新的连表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:没有资料可以排序!\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.totle>=p->data.totle)
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;
printf("\n=====>提示:排序已经完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\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)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

void main()
{
Link l;/* 连表 */
FILE *fp; /* 文件指针 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;
printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t-------福建农业职业学院计应0501 黄欢(32号)\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已经打开,正在导入记录......\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); /* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count);

while(1)
{
menu();
printf("请你选择操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已经退出系统,再见!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加学生 */
case 2:Del(l);break;/* 删除学生 */
case 3:Qur(l);break;/* 查询学生 */
case 4:Modify(l);break;/* 修改学生 */
case 5:Save(l);break;/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}

㈨ 请用一个单链表来保存学生数据,链表中的每个结点包含的数据信息有学生的学号和一门课的成绩。编写一个crea

#include<stdio.h>
#include<stdlib.h>
struct stud
{
int num;
float score;
struct stud *next;
};
int main()
{
struct stud *create();
void print(struct stud *head);
struct stud *head;
head=create();
print(head);
}
struct stud *create()
{

struct stud *head,*p1,*p2;
int n=0;
head = NULL;

p2 = p1 = (struct stud*)malloc(sizeof(struct stud));
printf("Please input student's num and score:\n");

scanf("%d",&p1->num ); //修改的地方
if( p1->num == 0 ){ p2->next=NULL;return head;}
scanf("%f",&p1->score);

while(p1->num !=0)
{

n=n+1;
if(n==1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct stud*)malloc(sizeof(struct stud));

scanf("%d",&p1->num ); //修改的地方
if( p1->num == 0 ){ p2->next=NULL;return head;}
scanf("%f",&p1->score);

}
p2->next =NULL;

return head;
}
void print(struct stud *head)
{
struct stud *p;
p=head;
printf("Output student's num and score:\n");
while(p!=NULL)
{
printf("%-5d%5.1f\n",p->num ,p->score );
p=p->next ;
}

}

㈩ C语言编程 编写程序,建立一个学生数据链表,学生的数据包括学号、姓名、成绩。

#include<stdio.h>
#include<malloc.h>
#define NULL 0
struct stud
{
int no;
char name[12];
int age;
struct stud*next;
};
#define LEN sizeof(struct stud)
struct stud*creat(void)
{
struct stud*p1,*p2,*head;
int n=0;
p1=(struct stud*)malloc(LEN);
scanf("%d%s%d",&p1->no,p1->name,&p1->age);
while(p1->no>0){
n++;
if(n==1){head=p1;p2=p1;}
else{p2->next=p1;p2=p1;}
p1=(struct stud*)malloc(LEN);
scanf("%d",&p1->no);
if(p1->no==0)break;
scanf("%s%d",p1->name,&p1->age);
}
p2->next=NULL;
return head;
}
void main()
{
struct stud*del(struct stud*head,int no);
int num;
struct stud*p,*p0;
p0=creat();
scanf("%d",&num);
p=del(p0,num);
print(p);
}
struct stud*del(struct stud*head,int num)
{
struct stud *p1,*p2;
p1=head;
while(p1->next!=NULL){
if(p1->no==num) break;
p2=p1;
p1=p1->next;
}
if(p1==head){
p1->next=head;
}
else {
p2->next=p1->next;
}
return head;
}

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919