1. 首页
  2. 资讯

如何用C语言链表实现学生信息管理系统

/*头文件*/ #include <stdio.h> #include<dos.h> #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #include<mem.h> /*内存操作函数*/ #include<ctype.

/*头文件*/

#include <stdio.h>

#include<dos.h>

#include<stdlib.h> /*其它说明*/

#include<string.h> /*字符串函数*/

#include<mem.h> /*内存操作函数*/

#include<ctype.h> /*字符操作函数*/

#include<alloc.h> /*动态地址分配函数*/

#define LEN sizeof(STUDENT)

typedef struct stu /*定义结构体数组用于缓存数据*/

{char num[6];

char name[5];

int score[3];

int sum;

float average;

int order;

struct stu *next;

}STUDENT;

/*函数原型*/

STUDENT *init(); /*初始化函数*/

int menu_select(); /*菜单函数*/

STUDENT *create(); /*创建链表*/

void print(STUDENT *head); /* 显示全部记录*/

void search(STUDENT *head); /*查找记录*/

STUDENT *delete(STUDENT *head); /*删除记录*/

STUDENT *sort(STUDENT *head); /*排序*/

STUDENT *insert(STUDENT *head,STUDENT *new); /*插入记录*/

void save(STUDENT *head); /*保存文件*/

STUDENT *load(); /*读文件*/

/*主函数界面*/

main()

{STUDENT *head,new;

head=init(); /*链表初始化,使head的值为NULL*/

for(;;) /*循环无限次*/

{switch(menu_select())

{

case 1:head=create();break;

case 2:print(head);break;

case 3:search(head);break;

case 4:head=delete(head);break;

case 5:head=sort(head);break;

case 6:head=insert(head,&new);break; /*&new表示返回地址*/

case 7:save(head);break;

case 8:head=load(); break;

case 9:exit(0); /*如菜单返回值为9则程序结束*/

}

}

}

/*初始化函数*/

STUDENT *init()

{

return NULL; /*返回空指针*/

}

/*菜单选择函数*/

menu_select()

{int n;

struct date d; /*定义时间结构体*/

getdate(&d); /*读取系统日期并把它放到结构体d中*/

printf("\n按任一键进入主菜单...... \npress any key to enter the menu......"); /*按任一键进入主菜单*/

getch(); /*从键盘读取一个字符,但不显示于屏幕*/

clrscr(); /*清屏*/

printf("********************************************************************************\n");

printf("\t\t 欢迎 Welcome to\n");

printf("\n\t\t\t 使用学生管理系统1.0\n\n\t\t\t\t\t-----------景炎中学计算机组WJQ\n");

printf("*************************************MENU***************************************\n");

printf("\t\t\t1. 输入学生成绩记录 Enter the record\n"); /*输入学生成绩记录*/

printf("\t\t\t2. 显示 Print the record\n"); /*显示*/

printf("\t\t\t3. 寻找 Search record on name\n"); /*寻找*/

printf("\t\t\t4. 删除 Delete a record\n"); /*删除*/

printf("\t\t\t5. 排序 Sort to make new a file\n"); /*排序*/

printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/

printf("\t\t\t7. 保存 Save the file\n"); /*保存*/

printf("\t\t\t8. 读取 Load the file\n"); /*读取*/

printf("\t\t\t9. 退出 Quit\n"); /*退出*/

printf("\n\t\t 制作吴俊遒WJQ Made by Wu Junqiu.\n");

printf("********************************************************************************\n");

printf("\t\t\t\t当前系统日期:%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*显示当前系统日期*/

do{

printf("\n\t\t\t输入你的选择Enter your choice(1~9):");

scanf("%d",&n);

}while(n<1||n>9); /*如果选择项不在1~9之间则重输*/

return(n); /*返回选择项,主函数根据该数调用相应的函数*/

}

/*输入函数*/

STUDENT *create()

{int i,s;

STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/

clrscr();

for(;;)

{p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/

if(!p) /*如果指针p为空*/

{printf("\n输出内存溢出. Out of memory."); /*输出内存溢出*/

return (head); /*返回头指针,下同*/

}

printf("输入学号Enter the num(0:list end):");

scanf("%s",p->num);

if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/

printf("输入名字Enter the name:");

scanf("%s",p->name);

printf("请输入3门成绩Please enter the %d scores\n",3); /*提示开始输入成绩*/

s=0; /*计算每个学生的总分,初值为0*/

for(i=0;i<3;i++) /*3门课程循环3次*/

{

do{

printf("成绩score%d:",i+1);

scanf("%d",&p->score[i]);

if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/

printf("数据错误,请重新输入 Data error,please enter again.\n");

}while(p->score[i]<0 || p->score[i]>100);

s=s+p->score[i]; /*累加各门成绩*/

}

p->sum=s; /*将总分保存*/

p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/

p->order=0; /*未排序前此值为0*/

p->next=head; /*将头结点做为新输入结点的后继结点*/

head=p; /*新输入结点为新的头结点*/

}

return(head);

}

/* 显示全部记录函数*/

void print(STUDENT *head)

{int i=0; /* 统计记录条数*/

STUDENT *p; /*移动指针*/

clrscr();

p=head; /*初值为头指针*/

printf("\n************************************STUDENT************************************\n");

printf("-------------------------------------------------------------------------------\n");

printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");

printf("-------------------------------------------------------------------------------\n");

while(p!=NULL)

{

i++;

printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

p=p->next;

}

printf("-------------------------------------------------------------------------------\n");

printf("**************************************END**************************************\n");

}

/*查找记录函数*/

void search(STUDENT *head)

{STUDENT *p; /* 移动指针*/

char s[5]; /*存放姓名用的字符数组*/

clrscr();

printf("请输入个姓名来查找. Please enter name for searching.\n");

scanf("%s",s);

p=head; /*将头指针赋给p*/

while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/

p=p->next; /*移动指针,指向下一结点*/

if(p!=NULL) /*如果指针不为空*/

{printf("\n*************************************FOUND************************************\n");

printf("-------------------------------------------------------------------------------\n");

printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

printf("-------------------------------------------------------------------------------\n");

printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);

printf("-------------------------------------------------------------------------------\n");

printf("***************************************END**************************************\n");

}

else

printf("\n没有该学生 There is no num %s student on the list.\n",s); /*显示没有该学生*/

}

/*删除记录函数*/

STUDENT *delete(STUDENT *head)

{int n;

STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/

char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/

clrscr();

printf("请输入要删除的学号 Please enter the deleted num: ");

scanf("%s",s);

p1=p2=head; /*给p1和p2赋初值头指针*/

while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/

{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/

p1=p1->next; /*将p1指针指向下一条记录*/

}

if(strcmp(p1->num,s)==0) /*学号找到了*/

{printf("**************************************FOUND************************************\n");

printf("-------------------------------------------------------------------------------\n");

printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");

printf("-------------------------------------------------------------------------------\n");

printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);

printf("-------------------------------------------------------------------------------\n");

printf("***************************************END**************************************\n");

printf("\n是否要删除,输入Y删除,N则退出\nAre you sure to delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/

for(;;)

{scanf("%c",&c);

if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/

if(c=='y'||c=='Y')

{

if(p1==head) /*若p1==head,说明被删结点是首结点*/

head=p1->next; /*把第二个结点地址赋予head*/

else

p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/

n=n-1;

printf("\n学号为(Num): %s 学生以被删除(student have been deleted.)\n",s);

printf("别忘了保存. Don't forget to save.\n");break; /*删除后就跳出循环*/

}

}

}

else

printf("\n没有这个学生在表上\nThere is no num %s student on the list.\n",s); /*找不到该结点*/

return(head);

}

/*排序函数*/

STUDENT *sort(STUDENT *head)

{int i=0; /*保存名次*/

STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/

temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/

head->next=NULL; /*第一个结点为新表的头结点*/

while(temp!=NULL) /*当原表不为空时,进行排序*/

{

t=temp; /*取原表的头结点*/

temp=temp->next; /*原表头结点指针后移*/

p1=head; /*设定移动指针p1,从头指针开始*/

p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/

while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/

{

p2=p1; /*待排序点值小,则新表指针后移*/

p1=p1->next;

}

if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/

{

t->next=p1; /*待排序点的后继为p*/

head=t; /*新头结点为待排序点*/

}

else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/

{

t->next=p1; /*t的后继是p1*/

p2->next=t; /*p2的后继是t*/

}

}

p1=head; /*已排好序的头指针赋给p1,准备填写名次*/

while(p1!=NULL) /*当p1不为空时,进行下列操作*/

{

i++; /*结点序号*/

p1->order=i; /*将结点序号赋值给名次*/

p1=p1->next; /*指针后移*/

}

printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/

return (head);

}

/*插入记录函数*/

STUDENT *insert(STUDENT *head,STUDENT *new)

{STUDENT *p0,*p1,*p2;

int n,sum1,i;

p1=head; /*使p1指向第一个结点*/

p0=new; /*p0指向要插入的结点*/

printf("\nPlease enter a new record.\n"); /*提示输入记录信息*/

printf("输入学号Enter the num:");

scanf("%s",new->num);

printf("输入名字Enter the name:");

scanf("%s",new->name);

printf("Please enter the %d scores.\n",3);

sum1=0; /*保存新记录的总分,初值为0*/

for(i=0;i<3;i++)

{

do{

printf("成绩score%d:",i+1);

scanf("%d",&new->score[i]);

if(new->score[i]>100||new->score[i]<0)

printf("数据错误Data error,please enter again.\n");

}while(new->score[i]>100||new->score[i]<0);

sum1=sum1+new->score[i]; /*累加各门成绩*/

}

new->sum=sum1; /*将总分存入新记录中*/

new->average=(float)sum1/3;

new->order=0;

if(head==NULL) /*原来的链表是空表*/

{head=p0;p0->next=NULL;} /*使p0指向的结点作为头结点*/

else

{while((p0->average<p1->average)&&(p1->next!=NULL))

{p2=p1; /*使p2指向刚才p1指向的结点*/

p1=p1->next; /*p1后移一个结点*/

}

if(p0->average>=p1->average)

{if(head==p1)head=p0; /*插到原来第一个结点之前*/

else p2->next=p0; /*插到p2指向的结点之后*/

p0->next=p1;}

else

{p1->next=p0;p0->next=NULL;} /*插到最后的结点之后*/

}

n=n+1; /*结点数加1*/

head=sort(head); /*调用排序的函数,将学生成绩重新排序*/

printf("\n学生Student %s 已被更新have been inserted.\n",new->name);

printf("不要忘了保存Don't forget to save the new file.\n");

return(head);

}

/*保存数据到文件函数*/

void save(STUDENT *head)

{FILE *fp; /*定义指向文件的指针*/

STUDENT *p; /* 定义移动指针*/

char outfile[10];

printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");

scanf("%s",outfile);

if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/

{

printf("打不开文件Cannot open the file\n");

return; /*若打不开则返回菜单*/

}

printf("\n保存中...Saving the file......\n");

p=head; /*移动指针从头指针开始*/

while(p!=NULL) /*如p不为空*/

{

fwrite(p,LEN,1,fp); /*写入一条记录*/

p=p->next; /*指针后移*/

}

fclose(fp); /*关闭文件*/

printf("保存成功....Save the file successfully!\n");

}

/* 从文件读数据函数*/

STUDENT *load()

{STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/

FILE *fp; /* 定义指向文件的指针*/

char infile[10];

printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");

scanf("%s",infile);

if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/

{

printf("打不开文件Can not open the file.\n");

return(head);

}

printf("\n寻找文件...Loading the file!\n");

p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/

if(!p1)

{

printf("内存溢出!Out of memory!\n");

return(head);

}

head=p1; /*申请到空间,将其作为头指针*/

while(!feof(fp)) /*循环读数据直到文件尾结束*/

{

if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/

p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/

if(!p1->next)

{

printf("Out of memory!\n");

return (head);

}

p2=p1; /*使p2指向刚才p1指向的结点*/

p1=p1->next; /*指针后移,新读入数据链到当前表尾*/

}

p2->next=NULL; /*最后一个结点的后继指针为空*/

fclose(fp);

printf("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");

return (head);

}

数据结构学生兴趣信息管理系统,有些问题不太明白,有大佬指教一下...

struct Hobby{char hobby[20]; //一个字符串用来存储兴趣名struct Hobby *next; //Hobby本身的链表};struct HobbyCategory //兴趣类别结构体{char hobbyCategory[20]; //一个字符串用来存储兴趣类别名struct Hobby *pHobby; //一个链表用来管理该类别下的所有兴趣struct HobbyCategory *next; //HobbyCategory本身的链表};struct Info //学生信息结构体{char key[20]; //一个字符串用来存储每项信息的名称char value[50]; //一个字符串用来存储每项信息的内容struct Info *next; //Info本身的链表struct Student //学生结构体{struct HobbyCategory *pHC; //一个链表用来管理兴趣类型struct Info *pInfo; //一个链表用来管理信息struct Student *next; //Student本身的链表};这种问题适合用C++编写,用C语言写会非常复杂。

如何用C语言链表实现学生信息管理系统

c语言用链表添加学生信息

定义学生信息管理系统是针对学校学生处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。

推行学校信息管理系统的应用是进一步推进学生学籍管理规范化、电子化、控制辍学和提高教育水平的重要举措。

产生背景学生信息档案的管理对于学校的管理者来说至关重要,学生信息是高等学校非常重要的一项数据资源,是一个教育单位不可缺少一部分。

特别是近几年来,国家政策的调整,我国高等院校大规模的扩招,给高等院校的教学管理、学生管理、后勤管理等方面都带来不少的冲击。

其包含的数据量大,涉及的人员面广,而且需要及时更新,故较为复杂,难以单纯地依*人工管理,而且传统的人工管理方式既不易于规范化,管理效率也不高,目前我国各类高等院校中还有相当一部分学生档案管理还停留在纸介质的基础上,尤其是中、小学对学生档案的管理更是落后,这样的管理机制已经不能适应时代发展的要求,其管理方法将浪费许多人力和物力。

随着科学技术的不断提高,计算机科学与技术日渐成熟,计算机应用的普及已进入人类社会生活的各个领域,并发挥着越来越重要的作用。

这种传统的手工管理模式必然被以计算机为物质基础的信息管理方法所取代。

作为计算机应用的一部分,使用计算机对学生档案进行管理,有着手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高学生档案管理的效率,也是学校向科学化、正规化管理发展的必要条件,更是各个高等院校与世界接轨的重要条件。

开发意义系统针对学校学生信息的特点以及管理中实际需要而设计,能够有效地实现学生信息管理的信息化,减轻管理人员的工作负担,高效率、规范化地管理大量的学生信息,并避免人为操作的错误和不规范行为。

基本功能奖学金管理:支持学生成绩绩点、任职分值、荣誉分值、综合分值等计算、统计和分析。

实现自动排名、审计奖学金,公示奖学金评审结果等功能。

困难生认定管理:学生申请,教师审批,申请发放各项资助。

有助于加强学校对困难生的服务和管理,简化困难生资助申请的繁琐过程,给困难生提供更加简洁、方便的服务渠道,确保资助准确、及时的发放。

勤工岗位申请管理:岗位设定、学生申请、教师审批。

提高了勤工岗位服务和管理的效率性和科学性。

科技项目申报管理:科技项目发布、学生申请、教师审批。

实现了对学生科技项目执行情况的监督、检查、项目验收鉴定和经费管理等工作流程化、规范化的管理。

就业信息管理:以“服务学生就业”理念为依托,构建一个针对性强,实时、方便的数据采集、分析和管理平台,逐步实现对学生就业信息的更好管理,提高信息化管理水平 , 为相关决策提供支持。

党员管理:支持以支部为核心的党员管理方式,加强和改进党员的管理,有助于党员能够及时参加党的组织生活,接受党组织的教育、管理和监督,更好的发挥先锋模范作用。

消息管理:意见反馈,处理。

搭建师生沟通平台,保证各项事务公平、公正、公开处理。

要求使用C++建立一个学生信息管理系统,具有创建、显示、查找、删...

#include struct subject { double subject_score; std::string subject_name; }; class student { std::string name; subject* subject_info; unsigned int subject_num; public: student() { name = "unknown"; subject_num = 0; subject_info = nullptr; } student( std::string name, unsigned int subject_number ): name(name), subject_num(subject_number) { subject_info = new subject [subject_num]; for ( unsigned int i=0; i std::cout std::cin >> subject_info[i].subject_name; std::cout "; std::cin >> subject_info[i].subject_score; } } ~student() { delete [] subject_info; } void set_info() { std::cout > name; std::cout > subject_num; subject_info = new subject [subject_num]; for ( unsigned int i=0; i std::cout std::cin >> subject_info[i].subject_name; std::cout "; std::cin >> subject_info[i].subject_score; } } friend std::ostream& operator out for ( unsigned int i=0; i out out } return out; } friend double average_score( const student& one ); }; double average_score( const student& one ) { double average; for ( unsigned int i=0; i average += one.subject_info[i].subject_score ; } return average/(double)one.subject_num; } int main(int argc, char *argv[]) { unsigned int num = 0; std::cout > num; student* classroom_A1 = new student [num]; for ( unsigned int i=0; i classroom_A1[i].set_info(); } for ( unsigned int i=0; i std::cout std::cout } delete [] classroom_A1; } 排序没有,可以在这个语言结构中自行插上。

排版有点乱,你自己调整一下吧!

求c语言 学生管理系统 程序 以下几个模块不必全有,少的我自己加,...

面的程序中;);n");printf(" #include printf("t 7: 按学号修改学生成绩 |"); printf(" \t 8: 保存所有学生信息 |\n\n"); printf("\t 9: 按成绩输出学生信息 |"); printf("\t 10: 显示不及格及优秀学生 |\n\n");printf("\t 11: 返回主菜单 |"); printf("\t\t 12: 退出 |\n\n");printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");printf("\t 请输入对应数字:");scanf("%d",&choose);/*取得用户的选择*/ switch(choose) { case 1:system("cls");OutputInformation();/*显示所有学生的信息*/ break; case 2: system("cls");DesplayInfoBystudentName(); break; case 3: system("cls");DesplayInfoBystudentNumber();/*根据用户输入的学号显示该学生的信息*/ break; case 4: system("cls");p=MallocNode();/*先申请一个新结点*/ GetInformation(p);/*要求用户输入信息到新结点中*/ InsertOneNode(p);/*将新结点加到链表中*/ break; case 5: system("cls");DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/ break; case 6: system("cls");ChangeMarkByName();/*根据用户输入的姓名修改学生成绩*/ break; case 7: system("cls");ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/ break; case 8: system("cls");SaveLinkToFile();/*保存数据*/ break;case 9: system("cls");paixu();break;case 10: system("cls");DesplayMarkSegment();break;case 11: system("cls");break;case 12: system("cls");SaveLinkToFile();/*保存数据后再退出*/ free(headLink); exit(1); break; default: system("cls"); break;} Menu();/*递归调用*/} /*建立链表表头*/ 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;istudentNumber='\0'; for(i=0;istudentName='\0'; for(i=0;iclassName='\0'; p->mark1=0.0; p->mark2=0.0; p->mark3=0.0; p->next=NULL; return p; } /*取得用户输入的学生信息*/ void GetInformation(STUDENT *t) { printf("请输入学生学号:"); scanf("%s",t->studentNumber); printf("请输入学生姓名:"); scanf("%s",t->studentName); printf("请输入该生所在班级:"); scanf("%s",t->className); printf("请输入第1门成绩:"); scanf("%f",&(t->mark1)); printf("请输入第2门成绩:"); scanf("%f",&(t->mark2)); printf("请输入第3门成绩:"); 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("请输入学生姓名:"); scanf("%s",studentName); while(p) { if(strcmp(p->studentName,studentName)==0) {system("cls");printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n"); DesplayOneNode(p); flag=1; break; } p=p->next; } if(!flag) {system("cls"); printf("\t 对不起,不存在姓名为 %s 的学生\n",studentName);} } /*根据用户输入的学号显示该学生的信息*/ void DesplayInfoBystudentNumber(void) { STUDENT *p; char studentNumber[20]; char flag=0; p=headLink->next; printf("请输入学生学号:"); scanf("%s",studentNumber); while(p) { if(strcmp(p->studentNumber,studentNumber)==0) { system("cls");printf("\t学号\t姓名\t班级\t成绩1\t成绩2\t成绩3\t总成绩\t平均成绩\n"); DesplayOneNode(p); flag=1; break; } p=p->next; } if(!flag) {system("cls");printf("\t 对不起,不存在学号为 %s 的学生\n",studentNumber); }} /*输出一个结点的信息*/ void DesplayOneNode(STUDENT *t) { printf("\t%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) { system("cls");printf("\t 不存在该学号的学生\n"); return; } system("cls");printf("\t 成功删除\n"); } /*显示所有学生的信息*/ void OutputInformation(void) { STUDENT *p; p=headLink->next; if(p==NULL) { printf("\t 现在没有学生信息,请先输入学...

...1.每个学生的信息:结构体stu 2.班级的所有学生的信息:单链表

#include "stdio.h"typedef struct stu{char name[10];char detail[20];struct stu *next;}inf;void list(inf *first);inf *content();void input(inf *temp);main(){inf *first=NULL;inf *current=NULL;do{if(first==NULL)current=first=content();else{current-&gt;next=content();current=current-&gt;next;}printf("continue? 1 or 0");fflush(stdin);}while(getch()=='1');list(first);}void list(inf *first){inf *current=first;while(current!=NULL){printf("\n%s:\n%s\n",current-&gt;name,current-&gt;detail);current=current-&gt;next;}}inf *content(){inf *temp;temp=(inf *)malloc(sizeof(inf));input(temp);return temp;}void input(inf *temp){printf("name(less than 9 characters):"); scanf("%s",temp-&gt;name);printf("detail about %s((less than 19 characters):",temp-&gt;name);scanf("%s",temp-&gt;detail);}

C语言学生成绩管理系统代码 急!!!!!!

参考#include "stdio.h" /*定义学生结构体*/ struct Student { char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average; }; /*声明学生数组及学生数量*/ struct Student students[1000]; int num=0; /*求平均值*/ float Avg(struct Student stu) { return (stu.Mark1+stu.Mark2+stu.Mark3)/3; } /*通过学号返回数组下标*/ int Student_SearchByIndex(char id[]) { int i; for (i=0;i<num;i++) { if (strcmp(students[i].ID,id)==0) { return i; } } return -1; } /*通过姓名返回数组下标*/ int Student_SearchByName(char name[]) { int i; for (i=0;i<num;i++) { if (strcmp(students[i].Name,name)==0) { return i; } } return -1; } /*显示单条学生记录*/ void Student_DisplaySingle(int index) { printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩"); printf("-------------------------------------------------------------\n"); printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name, students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average); } /*插入学生信息*/ void Student_Insert() { while(1) { printf("请输入学号:"); scanf("%s",&students[num].ID); getchar(); printf("请输入姓名:"); scanf("%s",&students[num].Name); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark1); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark2); getchar(); printf("请输入成绩:"); scanf("%f",&students[num].Mark3); getchar(); students[num].Average=Avg(students[num]); num++; printf("是否继续?(y/n)"); if (getchar()=='n') { break; } } } /*修改学生信息*/ void Student_Modify() { float mark1,mark2,mark3; while(1) { char id[20]; int index; printf("请输入要修改的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id); if (index==-1) { printf("学生不存在!\n"); } else { printf("你要修改的学生信息为:\n"); Student_DisplaySingle(index); printf("-- 请输入新值--\n"); printf("请输入学号:"); scanf("%s",&students[index].ID); getchar(); printf("请输入姓名:"); scanf("%s",&students[index].Name); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark1); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark2); getchar(); printf("请输入成绩:"); scanf("%f",&students[index].Mark3); getchar(); students[index].Average=Avg(students[index]); } printf("是否继续?(y/n)"); if (getchar()=='n') { break; } } } /*删除学生信息*/ void Student_Delete() { int i; while(1) { char id[20]; int index; printf("请输入要删除的学生的学号:"); scanf("%s",&id); getchar(); index=Student_SearchByIndex(id); if (index==-1) { printf("学生不存在!\n"); } else { printf("你要删除的学生信息为:\n"); Student_DisplaySingle(index); printf("是否真的要删除?(y/n)"); if (getchar()=='y') { for (i=index;i<num-1;i++) { students[i]=students[i+1]; } num--; } getchar(); } printf("是否继续?(y/n)"); if (getchar()=='n') { break; } } } /*按姓名查询*/ void Student_Select() { while(1) { char name[20]; int index; printf("请输入要查询的学生的姓名:"); scanf("%s",&name); getchar(); index=Student_SearchByName(name); if (index==-1) { printf("学生不存在!\n"); } else { printf("你要查询的学生信息为:\n"); Student_DisplaySingle(index); } printf("是否继续?(y/n)"); if (getchar()=='n') { break; } } } /*按平均值排序*/ void Student_SortByAverage() { int i,j; struct Student tmp; for (i=0;i<num;i++) { for (j=1;j<num-i;j++) { if (students[j-1].Average<students[j].Average) { tmp=students[j-1]; students[j-1]=students[j]; students[j]=tmp; } } } } /*显示学生信息*/ void Student_Display() { int i; printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩"); printf("-------------------------------------------------------------\n"); for (i=0;i<num;i++) { printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name, students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average); } } /*将学生信息从文件读出*/ void IO_ReadInfo() { FILE *fp; int i; if ((fp=fopen("Database.txt","rb"))==NULL) { printf("不能打开文件!\n"); return; } if (fread(&num,sizeof(int),1,fp)!=1) { num=-1; } else { for(i=0;i<num;i++) { fread(&students[i],sizeof(struct Student),1,fp); } } fclose(fp); } /*将学生信息写入文件*/ void IO_WriteInfo() { FILE *fp; int i; if ((fp=fopen("Database.txt","wb"))==NULL) { printf("不能打开文件!\n"); return; } if (fwrite(&num,sizeof(int),1,fp)!=1) { printf("写入文件错误!\n"); } for (i=0;i<num;i++) { if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1) { printf("写入文件错误!\n"); } } fclose(fp); } /*主程序*/ main() { int choice; IO_ReadInfo(); while(1) { /...

本文来自投稿,不代表本站立场,如若转载,请注明出处。