C语言程序设计基于链表的学生成绩管理系统

合集下载

C语言程序设计-基于链表的学生成绩管理系统

C语言程序设计-基于链表的学生成绩管理系统

精心整理华北科技学院计算机系综合性实验实验报告课程名称 C语言程序设计实验学期 2011 至 2012 学年第二学期实验报告须知1、学生上交实验报告时,必须为打印稿(A4纸)。

页面空间不够,可以顺延。

2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。

《C语言程序设计》课程综合性实验报告开课实验室:基础五 2012年7月 6 日struct xs *init(){struct xs* hd;hd=(struct xs *)malloc(sizeof(struct xs));hd->next=NULL;return hd;}void fr(struct xs *hd){struct xs *p;p=hd->next;while(hd->next!=NULL){printf(" 学号:");scanf("%d",&xh);printf(" 姓名:");scanf("%s",xm);printf(" 高数:");scanf("%d",&gs);printf(" 英语:");scanf("%d",&yy);printf(" 物理:");scanf("%d",&wl);p=(struct xs *)malloc(sizeof(struct xs));p->xh=xh;strcpy(p->xm,xm);p->gs=gs;fprintf(fp,"%3d\n",num);for(i=0;i<num;i++){fprintf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p ->yy,p->wl);p=p->next;}fclose(fp);printf("\n 保存文件完毕,请按任意键继续!\n ");getch();}else{fscanf(fp,"%3d %12s %3d %3d %3d\n",p->xh,p->xm,p->gs,p->y y,p->wl);p->next=hd->next;hd->next=p;}fclose(fp);printf("\n 读取文件完毕,请按任意键继续!\n ");getch();}void print(struct xs *hd){struct xs*p;p=hd->next;}printf("**********************************************\n");printf(" 链表显示完毕,请按任意键继续!\n");getch();}elseprintf("\n 当前链表为空,请先读取文件或创建链表!\n按任意键继续!\n ");}void menu(){system("cls");printf(" ****************************************\n");printf(" * 学生成绩管理系统(1.0) *\n");head=init();while(xz!=5){menu();scanf("%d",&xz);switch(xz){case 1:create(head);break;case 2:print(head);break;case 3:fr(head);free(head);}。

学生个人信息成绩管理系统(c语言动态链表不限定输入学生人数可查询保存的信息)

学生个人信息成绩管理系统(c语言动态链表不限定输入学生人数可查询保存的信息)

struct stu *creat(void) //创建链表的函数,并输入学生信息
{
n=0;
head=NULL;
do
{ p1=(struct stu * ) malloc(LEN);
if(n==1) a=head;
else a=a->next;
if (strcmp (x,a->college)==0)
printf("输出:%12d%10s%18s%10s%10s%5.1f\n",a->num,a->name,a->college,a->Class,a->subject,a->score);
n=i=0;
if (head2!=NULL)
do
{ n=n+1;
i=i+1;
if(n==1) a=head2;
else a=a->next;
if(i==1) sumnum=a->score;
//主模块
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define LEN sizeof(struct stu)
struct stu
printf("输出:%12d%10s%18s%10s%10s%5.1f\n",a->num,a->name,a->college,a->Class,a->subject,a->score);

C语言程序设计报告-基于链表的学生信息管理系统

C语言程序设计报告-基于链表的学生信息管理系统

《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:网络工程班级:二班姓名:学号:指导教师:提交日期:一、 实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。

要求一个工程下多个文件。

main 函数以单独的文件main.cpp 存放。

在头文件student.h 中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N (学生数)。

(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)。

全局类型的定义如下:二、实验要求:(1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。

(2) 定义函数STU *CreateList (char * filename ):从二进制文件“studentInfo.dat ”中依次读取12个学生的数据(在文件中学生信息按学号由低到高依次存放),建立带头结点(特殊结点,不放学生信息)的、有序的单链表(链表中各学生信息按学号由低到高依次存放), 返回表头指针。

每次从文件中读一个学生的信息,并将该学生信息插入到链表的表尾。

设置头结点的目的:在链表中第一个学生结点之前插入或者是删除第一个学生结点的时候不必做特殊处理)更灵活的方法:从文件中循环读数据时,根据当前学生信息的next成员的值,决定是否进行下次循环,如果next==NULL,则表明读到最后一个学生信息,循环结束。

(3)定义函数void Output (STU *head):以指向链表头结点的指针为参数,将链表中所有学生的信息表格化输出。

定义函数void OutOneNode(STU *p): 输出参数所指的链表中一个结点的信息。

(4)STU *Max(STU *head):查找总成绩最高的学生,返回指向该学生结点的指针。

考虑特殊情况,找到两个及以上相同最高分同学的情况,如何处理?(5)定义函数STU *Search_num(STU * head ,char *num ):查找指定的学生,返回指向该学生结点的指针。

学生成绩管理系统(数据结构C语言版源代码)

学生成绩管理系统(数据结构C语言版源代码)

让结局不留遗憾,让过程更加完美。

#include<stdio.h>#include<string.h>#include<stdlib.h>struct students{char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *next; /*用与构建连表指向下一结点*/};FILE *fp; /*定义全局变量fp*/void Revisemenu();/*修改菜单*/void Sortmenu();/*排序菜单*/void menu();/*主菜单*/void secret();/*安全验证*/struct students * Input();/*新建学生信息*/void fprint(struct students *head);/*将信息导入文件可追加*/void fprint_(struct students *head);/*将信息导入文件并覆盖*/void Browse(struct students *head);/*浏览全部学生信息*/struct students * create(struct students *headint *n);/*从tushu_list中读取数据构建链表*/void FindofNum(struct students *head);/*按学号查询学生信息*/void FindofNname(struct students *head);/*按姓名查询学生信息*/void SortEnglish(struct students * head);/*按英语成绩排序*/void SortJava(struct students * head);/*按Java成绩排序*/void SortSjjg(struct students * head);/*按数据结构成绩排序*/void SortSzdl(struct students * head);/*按数字逻辑电路成绩排序*/ void SortJsj(struct students * head);/*按计算机组成原理成绩排序*/ struct students * Delete(struct students * headchar m[15]);/*按学号删除学生成绩信息*/struct students * Revise();/*修改学生信息(按编号修改)*//*主菜单*/void menu(){printf("\n\n");printf("***************************************************\n");printf(" 学生成绩管理系统 \n");printf("---------------------------------------------------\n");printf(" 1-添加新同学 2-浏览学生信息 \n");printf(" 3-按学号查询 4-按姓名查询 \n");printf(" 5-按成绩排序 6-修改学生信息 \n");printf(" 7-删除学生信息 0-退出系统 \n");printf("---------------------------------------------------\n");printf("___________________________________________________\n"); }/*排序菜单*/void Sortmenu(){printf("\n\n");printf("***************************************************\n");printf(" 按成绩排序 \n");printf(" 1-大学英语 2-JAVA编程 \n");printf(" 3-数据结构 4-数字逻辑电路 \n");printf(" 5-计算机组成原理 0-返回上级菜单 \n");printf("***************************************************\n"); }/*修改菜单*/void Revisemenu(){printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" 1--修改学生姓名 2--修改学生学号 \n"); printf(" 3--修改学生性别 4--修改英语成绩 \n"); printf(" 5--修改JAVA成绩 6--修改数据结构 \n"); printf(" 7--修改数字电路 8--修改计算计 \n");printf(" 0--返回上级菜单 \n"); printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); }/*安全验证*/void secret(){char a[20];printf("**欢迎来到学生信息管理系统进入系统前请先进行密码验证---");printf(" ");do{gets(a); /*输入密码*/system("cls"); /*调用库函数清屏*/printf("对不起!您输入的密码有误请重新输入---");}while(strcmp(a"0605")!=0); /*单一密码"0605"*/system("cls");}/*新建学生信息*/struct students * Input(){struct students *p1*p2*head; /*建立辅助结点及头结点*/char Name;int n=0x;printf("\n请按对应项输入学生信息以#结束:\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机组成原理\n");p1=(struct students *)malloc(sizeof(struct students));head=p2=p1;do{ /*使用do while语句输入学生信息*/scanf("%s"&p1->Name);if(strcmp(p1->Name"#")==0)break; /*判断结束符*/elsescanf("%s%s%lf%lf%lf%lf%lf"p1->Nump1->Sex&p1->English&p1->Java&p1->Sjjg&p1->Szdl&p1->Jsj);Name='#';p1=(struct students *)malloc(sizeof(struct students));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("学生信息输入结束!\n");getchar();printf("是否保存学生信息?(1.是/2.否):");scanf("%d"&x);if(x==1)fprint(head); /*调用函数保存至文件*/ elseprintf("\n文件没有被保存!\n");return head; /*返回头指针*/}/*将信息导入文件可追加*/void fprint(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""a"))==NULL){printf("File open error!\n");exit(0);}for(p1=head;p1->next!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/printf("\n学生信息已成功保存到文件 students_list.txt 中!\n");getchar();}/*将信息导入文件并覆盖*/void fprint_(struct students *head){struct students *p1;if((fp=fopen("students_list.txt""w"))==NULL)printf("File open error!\n");exit(0);}for(p1=head;p1!=NULL;p1=p1->next) /*遍历*/fprintf(fp"%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p1->Namep1->Nump1->Sexp1->Englishp1->Javap1->Sjjgp1->Szdlp1->Jsj);/*将学生信息写入文件*/fclose(fp); /*关闭文件*/;getchar();}/*浏览全部学生信息*/void Browse(struct students *head){char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}printf("-------------------------------------------------------------\n");printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(!feof(fp))/*读取并输出*/{fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"NameNum&English&Java&Sjjg&Szdl&Jsj);printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"NameNumSexEnglishJavaSjjgSzdlJsj);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}/*从tushu_list中读取数据构建链表*/struct students * create(struct students * headint *n){FILE *fp;struct students*p*p1*p2;if((fp=fopen("students_list.txt""a+"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){(*n)++;p=(struct students *)malloc(sizeof(struct students));fscanf(fp"%s%s%s%lf%lf%lf%lf%lf"p->Namep->Nump->Sex&p->English&p->Java&p->Sjjg&p->Szdl&p->Jsj);if(head==NULL){head=p;p1=p;}else{p1->next=p;p2=p1;p1=p;}}p2->next=NULL;free(p);(*n)--;fclose(fp);return head;}/*按姓名查询学生信息*/void FindofName(struct students *head) {int i=0n=0;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生姓名:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Nameb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到名为"%s"的学生信息!\n"b);}/*按学号查询学生信息*/void FindofNum(struct students *head){int i=0n;char b[20];struct students *p;head=create(head&n);p=head;printf("\n请输入要查询的学生学号:");scanf("%s"b);while(p!=NULL){if(strcmp(p->Numb)==0){printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);i++;}p=p->next;}if(i==0)printf("\n对不起!没有找到学号为"%s"学生信息!\n"b);}/*按英语成绩排序*/void SortEnglish(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double English;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;English=p->English; /*将链表中第一个成绩赋给English*/while(p!=NULL){if((p->English)>English)/*比较*/English=p->English;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->English==English){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->English==English){ /*分数相同时无需比较*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/ printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按英语成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按JAVA成绩排序*/void SortJava(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Java;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Java=p->Java; /*将链表中第一个成绩赋给Java*/while(p!=NULL){if((p->Java)>Java)/*比较*/Java=p->Java;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Java==Java){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Java==Java){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按Java成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数据结构排序*/void SortSjjg(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Sjjg;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Sjjg=p->Sjjg; /*将链表中第一个成绩赋给Sjjg*/while(p!=NULL){if((p->Sjjg)>Sjjg)/*比较*/Sjjg=p->Sjjg;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Sjjg==Sjjg){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Sjjg==Sjjg){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数据结构成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按数字电路排序*/void SortSzdl(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Szdl;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Szdl=p->Szdl; /*将链表中第一个成绩赋给Szdl*/while(p!=NULL){if((p->Szdl)>Szdl)/*比较*/Szdl=p->Szdl;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Szdl==Szdl){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Szdl==Szdl){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按数字电路成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按计算机组成原理排序*/void SortJsj(struct students * head){struct students *p*tail; /*定义中间变量*/int n;double Jsj;p=(struct students *)malloc(sizeof(struct students));head=create(head&n);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");while(head->next!=NULL) /*利用选择法排序*/{tail=NULL;p=head;Jsj=p->Jsj; /*将链表中第一个成绩赋给Jsj*/while(p!=NULL){if((p->Jsj)>Jsj)/*比较*/Jsj=p->Jsj;tail=p;p=p->next;}tail=NULL;p=head;while(p->next!=NULL){if(p->Jsj==Jsj){printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);if(p==head)head=head->next;elsetail->next=p->next;}tail=p;p=p->next;}if(p->Jsj==Jsj){ /*成绩相同时无需比较*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);tail->next=NULL;}}p=head; /*将链表赋给结构体指针*/printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);/*浏览排序后的信息*/printf("按计算机组成原理成绩排序后输出如上(注:此过程不保存至文件):\n");return;}/*按学号删除学生成绩信息*/struct students * Delete(struct students * headchar m[15]){struct students *ptr1*ptr2;int n;printf("\n所有学生信息如下:\n");Browse(head);printf("\n请输入想要删除的学生学号:");scanf("%s"m);head=create(head&n);if(head==NULL){printf("无学生信息!\n");return head;}if((strcmp(head->Numm)==0)&&head!=NULL){ptr2=head;head=head->next;free(ptr2);}if(strcmp(head->Numm)!=0){ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(strcmp(ptr2->Numm)==0){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}}fprint_(head);printf("\n学号为' %s '学生信息已被删除并保存至文件!\n"m);return head;}/*修改学生信息(按编号修改)*/struct students * Revise(){int n=0t;char num[10];char Num[10]; /*字符型学生学号*/char Name[20]; /*字符型学生姓名*/char Sex[3]; /*字符型学生性别*/double English; /*双精度实型英语成绩*/double Java; /*双精度实型Java成绩*/double Sjjg; /*双精度实数据结构*/double Szdl; /*双精度实型数字电路*/double Jsj; /*计算机组成原理*/struct students *head=NULL;struct students *p;printf("\n所有学生信息如下:\n");Browse(head);head=create(head&n);printf("\n输入需要修改的学生的学号:");scanf("%s"num);p=head;while(head!=NULL){if(strcmp(p->Numnum)==0){system("cls");Revisemenu();printf("编号为%s的学生信息如下:\n"num);printf("姓名学号性别英语 Java 数据结构数字电路计算机\n");printf("%s\t%s\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n"p->Namep->Nump->Sexp->Englishp->Javap->Sjjgp->Szdlp->Jsj);while(1){printf("请选择需要修改的信息:");scanf("%d"&t);switch(t){case 1:printf("请输入新姓名:");scanf("%s"Name);strcpy(p->NameName);break;case 2:printf("请输入新学号:");scanf("%s"&Num);strcpy(p->NumNum);break;case 3:printf("请输入新性别:");scanf("%s"Sex);strcpy(p->SexSex);break;case 4:printf("请输入新英语成绩:");scanf("%lf"&English);p->English=English;break;case 5:printf("请输入新Java成绩:");scanf("%lf"&Java);p->Java=Java;break;case 6:printf("请输入新数据结构成绩:");scanf("%lf"&Sjjg);p->Sjjg=Sjjg;break;case 7:printf("请输入新数字电路成绩:");scanf("%lf"&Szdl);p->Szdl=Szdl;break;case 8:printf("请输入新计算机组成原理成绩:");scanf("%lf"&Jsj);p->Jsj=Jsj;break;case 0:system("cls");menu();goto lab;break;default:printf("对不起输入有误!");break;}}}elsep=p->next;}lab:fprint_(head);printf("修改完成并储存至文件!\n");return head;}/*主函数*/void main(){int choicech;char m[15];struct students *head=NULL;secret();menu();while(1){printf("请输入选项:");scanf("%d"&choice);switch(choice){case 1:Input();break;case 2:system("cls");menu();Browse(head);break;case 3:system("cls");menu();FindofNum(head);break;case 4:system("cls");menu();FindofName(head);break;case 5:system("cls");Sortmenu();do{printf("请输入您的选择:");scanf("%d"&ch);switch(ch){case 1:system("cls");Sortmenu();SortEnglish(head);break;case 2:system("cls");Sortmenu();SortJava(head);break;case 3:system("cls");Sortmenu();SortSjjg(head);break;case 4:system("cls");Sortmenu();SortSzdl(head);break;case 5:system("cls");Sortmenu();SortJsj(head);break;}}while(ch!=0);system("cls");menu();break;case 6:system("cls");menu();Revise();break;case 7:system("cls");menu();head=Delete(headm);break;case 0:system("cls");printf("\t\t欢迎下次再来!");exit(0);default:printf("对不起输入有误!");break;}}return ;}。

C语言课程设计—学生成绩管理系统

C语言课程设计—学生成绩管理系统

#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。

h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。

学生成绩管理系统(链表版)

学生成绩管理系统(链表版)

《C语言应用》实验报告题目学生成绩管理系统(链表版)(1)能完成学生成绩的插入、查询、修改、删除、输出等功能;(2)采用单链表存储结构实现;(3)所有数据以外部文件方式保存第2章第2章总体设计2。

1 系统的程序流程图绘制一个系统的总体程序流程图,主要展示系统从开始以后,可以经过哪些流程,最后结束。

按姓名修改某位同学的成绩按姓名修改某位同学的成绩输出链表内容输出链表内容2。

2系统的全局变量和常量系统全局变量int n;char a;头文件:#include "stdio.h"#include ”time。

h"#include "string。

h”#include ”stdlib.h"#include ”conio。

h"2。

3系统的函数介绍把系统中的每个函数的原型列出来,解释一下函数的返回值及形式参数的含义;最后,再介绍一下每个函数的功能。

void Create(int n)//创建链表void List()//输出链表内容void list()//输出链表所有内容void save()//文件保存void save1() //文件保存void read()//文件读取void read1()//文件读取void SA VE(){ //保存到可浏览文件void SA VE1() //保存到可浏览文件void sort_data_copy(Lstu *p,Lstu *s)//交换排序时的值void sort()//对初始成绩进行排序void sort1()//对所有数据进行排序void search_print(Lstu *p)//输出查找信息void search_choose()//选择按分数段查找方式void search()//查找void modify_choose(Lstu *p,int n)//选择修改方式void modify()//按姓名修改void Insert()//按序号插入void del() //按姓名删除void statistics()//成绩统计int menu() //菜单(主界面)第3章第3章详细设计按函数,写出函数的原型声明,并画出每个函数的程序流程图。

C语言学生成绩管理系统(单向链表)

C语言学生成绩管理系统(单向链表)
/*************************************************************************************
本系统实现了学生管理系统的数据新建、插入、删除、遍历、保存到文件、文件读取、数据排序、数据销毁等操作;
*************************************************************************************/
//file_ctrl.c
Student *Readfile(); //------
void Savetofile(Student *head,char *filename);//fwrite保存学生信息到文件
void SavetoFile2(Student *head,char *filename);//fprintf保存学生信息到文件
case 5: head=Sortbyno(head); //按学号排序
printf("---当前链表为:---\n");
Printinfo(head);break;
}
return 0;
}
/*************************************************************************************/
void Help()
{
printf("\n---很无语,你不知道怎么操作---\n");
}
/*========================
主函数
==========================*/

C语言写的学生成绩管理系统(链表)

C语言写的学生成绩管理系统(链表)

#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf("请先录入学生成绩信息\n");printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu();printf("请选择:");getchar();choose=getchar();switch(choose){case '1':output(head);back();break;case '2':binsearch(head);back();break;case '3':insert(&head);output(head);back();break;case '4':delet(&head);output(head);back();break;case '5':good(head);back();break;case '6':fail(head);back();break;case '7':sort(head);output(head);back();break;case '0':flag=0;printf("\n *** The End! ***\n");printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");break;default: printf("\n Wrong Selection !(选择错误,请重选)\n");back();}}}void menu(){printf(" \n 学生成绩统计与分析系统\n");printf(" \n 菜单\n\n");printf(" \n 1. 显示所有学生的信息\n");printf(" \n 2. 查找某学号的学生信息\n");printf(" \n 3. 插入某学生的信息 \n");printf(" \n 4. 删除某学号学生的信息\n");printf(" \n 5. 统计各门课程成绩在90分以上学生所占百分比\n");printf(" \n 6. 统计各门课程成绩在60分以下学生所占百分比 \n");printf(" \n 7. 按总分降序排序,依高低排出名次 \n");printf(" \n 0. 退出 \n\n");}void back(){int x;printf("\n");do{printf("按1返回菜单界面:");scanf("%d",&x);}while(x!=1);}void input(struct studcode **headp){struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->stu dent.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\ n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p-> student.dl,p->student.cx,p->student.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf("请输入需要查找的学生的学号:");scanf("%ld",&x);printf("\n");while(p!=NULL){if(p->student.num==x){printf("该学生信息如下:\n");printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p ->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->stude nt.cx,p->student.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf("没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf("请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;printf("*****插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last;long x;p=*headp;printf("请输入你要删除的学生的学号:");scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){last=p;p=p->next;}if(p->student.num==x){if(p==*headp)*headp=p->next;elselast->next=p->next;free(p);printf("\n*****删除成功*****\n");}else printf("\n***删除失败,无该学生信息***\n");}void good(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void fail(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx<60) x1++;if(p->student.dx<60) x2++;if(p->student.ts<60) x3++;if(p->student.dl<60) x4++;if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void sort(struct studcode *head){struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++;p=p->next;}for(p1=head,i=0;i<n-1;i++,p1=p1->next)for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next)if(p1->student.zf<p2->student.zf){temp=p2->student;p2->student=p1->student;p1->student=temp;}printf("\n*****排序成功*****\n"); }。

「C语言-学生成绩管理系统-链表实现-源码」

「C语言-学生成绩管理系统-链表实现-源码」

#include<stdio.h>//标准输入输出#include <malloc.h>//内存分配#include <stdlib.h>#include<string.h>/*####说明####2014.12.28修改内容:修改了大量bug,加入了姓名项v1.6简单学生管理系统蔚蓝之链编写本人是C语言初学者,初学C语言没几个月,程序写的"很笨",不喜勿喷^_^vc++6.0编译无error,无warning已实现功能:添加学生,列出学生信息列表,删除学生,退出,学号重复检查,排序功能,多科成绩录入(求平均成绩,及总平均成绩),保存记录,读取记录,修改功能;待实现功能:查询......2014.12.1创建文件,开始编写,增加添加学生函数,增加列出学生函数,增加删除学生函数,退出版本1.02014.12.2修改内容:增加学号重复检查函数,修复显示内容时程序终止,输出列表函数优化,添加学生函数优化 1.12014.12.3~2014.12.4修改内容:增加排序函数,删除函数内部优化,main函数内部改动,添加学生函数优化1.22014.12.5~2014.12.7修改内容:增加多科目录入,添加函数优化,新增总成绩与平均成绩显示,排序函数优化,输出函数改动1.3,更新到此告一段落,继续学习去(^_^)2014.12.9~2014.12.13修改内容:新增保存函数,读取函数,主程序修改,新增链表清除函数1.42014.12.14修改内容:新增修改函数,新增宏定义MAX_SCORE and MAX_SNO,方便程序的修改,修改程序中所有warning,一些bug修正1.5*///常量定义区+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#define bool int //由于C语言中不存在bool型,所以这里把它定义成int型#definetrue 1 //同上#define false 0 //↑#define LEN sizeof(struct ryb) //动态内存分配空间大小#define DATAFILE "DATA"//数据保存文件名#defineMAX_SCORE150//最高分数上限值#define MAX_SNO200 //最多录入学生上限值,即能输入的最大学号数//END常量定义============================================================================================================//声明函数=================================================================================================================struct ryb* del_item_ryb (struct ryb *head,intsno,int * del_message);//删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败)),返回删除后的链表头structryb * create_item_ryb (struct ryb *head);//向指定的链表添加学生,并返回链表头voidput_ryb (struct ryb * head);//输出学号及成绩(欲输出链表头)bool is_sno(struct ryb*head, int sno );//判断指定学号是否存在,如存在返回tru e,不存在返回false(链表头,欲判断学号)struct ryb * order(struct ryb *head, enumordertypetype,intfs);//排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩))bool save_data(struct ryb * head);//保存链表数据函数(欲保存链表头)struct ryb *read_data(void);//读取数据到链表,并返回链表头void clear(struct ryb* head);//清除函数,清除指定链表所有数据,释放内存空间void amend_ryb(struct ryb * head,int sno);//修改函数,修改指定学号学生成绩信息(链表头,要修改成绩的学生学号)structryb {//定义链表数据结构intsno; //学号ﻩchar name[9]; //姓名int chinese; //语文ﻩint math; //数学ﻩint english; //英语int clanguage; //C语言ﻩinttiyu; //体育int score; //总成绩ﻩstruct ryb *next;};enum ordertype{//定义排序枚举类型asc,desc};//性感的分割线$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$int main ( void ){struct ryb * head,* temp_h;//链表头,临时链表boolexit=false;short intvalue;//接受输入信息1,2,3,41表示添加信息,2显示信息,3删除信息,4排序,5退出int sno, del_message=0;//学号,删除函数处理结果(1为删除成功,0为删除失败)intpxfs,pxlx;//排序方式,排序类型(方式asc\desc);(类型1学号,2成绩)char is_quit;//表示是否退出,y或Y表示退出,否则不退出ﻩchar is_save;//表示是否保存数据,y或Y表示保存,否则不保存char is_read;//表示是否读取数据,y或Y表示读取,否则不读取ﻩbool ssave;//表示是否保存成功,true表示成功,false表示保存失败ﻩint amend_sno;//表示要修改的学号head= (struct ryb*)malloc(LEN);//创建初始链表head->sno=0;//链表赋初值ﻩhead->next = NULL;ﻩdoﻩ{printf("蔚蓝学生管理系统v1.6(C语言版) \n\n");printf("①添加学生\n②显示成绩列表\n③删除学生\n④排序\n⑤保存数据\n⑥读取数据\n⑦修改\n⑧退出系统\n\n");ﻩprintf("等待命令输入:");fflush(stdin);//清空键盘缓冲区scanf("%d",&value);if(value== 1)//添加ﻩ{head=create_item_ryb(head);//添加信息ﻩprintf("录入信息结束!\n");system("pause");}else if (value == 2)//显示ﻩ{put_ryb(head); //显示信息ﻩﻩsystem("pause");ﻩ}else if(value== 3)//删除ﻩ{printf("请输入要删除的学生学号:");ﻩfflush(stdin);//清空键盘缓冲区ﻩﻩscanf("%d",&sno);ﻩhead = del_item_ryb(head,sno,&del_message);ﻩ//删除ﻩif(del_message== 1){ﻩﻩprintf("删除成功!!!\n");ﻩ}ﻩﻩelse{ﻩﻩprintf("删除失败!!!\n");ﻩ}ﻩsystem ("pause");ﻩ}else if(value== 4)//排序ﻩ{r:ﻩﻩprintf ("请请输入排序方式(1升序,2降序):");ﻩfflush(stdin);ﻩscanf("%d",&pxfs);ﻩﻩprintf("请输入排序类型(1按学号,2按成绩):");ﻩfflush(stdin);ﻩscanf("%d",&pxlx);if(pxfs >2 || pxfs<0 || pxlx>2|| pxlx<0)ﻩﻩ{ﻩﻩprintf("排序方式或排序类型输入不符合规定!!!请重新输入!!!\n");system ("pause");ﻩﻩgoto r;}ﻩif(pxfs==1)ﻩ{ﻩhead=order(head, asc,pxlx);}ﻩelse {ﻩﻩhead=order(head, desc,pxlx);ﻩﻩ}ﻩprintf ("排序完成!!!\n");ﻩ system("pause");ﻩ}elseif(value== 5)//保存数据{ﻩﻩis_save= 'N';ﻩprintf("您是否要保存当前修改过的学生数据,以前的数据将被覆盖!\n(Y\\N):");ﻩﻩfflush(stdin);ﻩﻩscanf("%c",&is_save);ﻩif(is_save =='Y' || is_save == 'y')ﻩ{ﻩﻩssave = save_data(head);ﻩﻩif(ssave == true)ﻩﻩ{ﻩﻩﻩprintf ("当前数据已成功保存到磁盘!\n");system("pause");ﻩﻩ}else{ﻩﻩprintf("保存失败或没有数据!\n");ﻩﻩsystem("pause");ﻩﻩ}}ﻩﻩelseﻩ{ﻩprintf ("您取消了保存数据操作!\n");ﻩﻩsystem("pause");}ﻩ}elseif(value==6)//读取数据ﻩ{is_read ='N';printf("您是否要读取磁盘数据,执行此操作将覆盖当前数据,是否继续?\n (Y\\N):");fflush(stdin);ﻩscanf("%c", &is_read);if(is_read =='Y'||is_read =='y')ﻩ{ﻩtemp_h =read_data();ﻩﻩﻩif(temp_h== NULL)ﻩﻩ{ﻩprintf ("数据读取失败!\n");ﻩsystem("pause");ﻩ}else{ﻩﻩﻩclear(head);//清空当前链表,释放空间ﻩﻩﻩhead =temp_h;//读取新链表ﻩﻩprintf("数据读取成功!\n");ﻩsystem("pause");ﻩ}ﻩ}ﻩﻩelseﻩ{ﻩprintf("您取消了数据读取操作!\n");ﻩsystem ("pause");ﻩ}ﻩ}else if(value ==7)ﻩ{ﻩﻩamend_sno=0;ﻩprintf("请输入要修改的学生学号:");fflush(stdin);ﻩﻩscanf("%d",&amend_sno);ﻩif(amend_sno>0&& amend_sno <= MAX_SNO){ﻩamend_ryb(head,amend_sno);}ﻩﻩelse{ﻩﻩprintf ("学号输入不合法,学号为1-%d之间的数包括(1,%d)!!!\n",MAX_SNO,MAX_SNO);ﻩﻩsystem("pause");ﻩﻩcontinue;ﻩ}}elseif(value== 8)//退出ﻩ{printf("您确定要退出蔚蓝学生成绩管理系统吗?(Y\\N):");ﻩfflush(stdin);ﻩﻩscanf("%c",&is_quit);ﻩif(is_quit== 'Y'|| is_quit =='y')ﻩ{exit = true;ﻩprintf("感谢使用蔚蓝学生成绩管理系统,再见!\n");ﻩﻩsystem("pause");ﻩﻩ}ﻩﻩ}ﻩelse{printf("请输入1-7之间的数!!!\n");ﻩsystem("pause");}system("cls");}while(exit==false);return 0;}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$主程序END$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$$$//函数定义#if(1)struct ryb *del_item_ryb (struct ryb*head, int sno,int*messag e)//删除指定学号节点(链表头,欲删除学号,处理结果(1为删除成功,0为删除失败)),返回删除后的链表头{structryb * p,* p1;p =head;ﻩdo{ﻩﻩﻩif(p->sno==sno){ﻩﻩif(p == head)//如果第一个为要删除的值ﻩ{ﻩﻩﻩhead = head->next;//修改链表头ﻩﻩﻩﻩ//printf("已成功修改头指针sno=%d\n",head->sno);ﻩ}ﻩﻩelseﻩ{ﻩﻩﻩﻩp1->next= p->next;//将链表节点指向要删除的链表节点的下一节点ﻩﻩfree(p);//释放已删除的链表节点内存ﻩﻩﻩ}ﻩﻩﻩ*message = 1;ﻩbreak;ﻩﻩ}p1 = p;//保存当前链表节点ﻩp = p->next;ﻩif(p->next==NULL && p->math >=0 && p->math<=MAX_SNO)ﻩﻩ{ﻩﻩ*message =0;ﻩﻩ}ﻩ}while(p->next&& p->math>=0&& p->math <= MAX_SNO);return head;ﻩ}#endifstructryb* create_item_ryb(struct ryb*head) //向指定的链表添加学生,并返回链表头{ﻩstruct ryb *p1;inti=1;//i表示学生数ﻩint tempsno;//临时学号ﻩint scorearr[5],n;//分数数组,循环值char tempname[9];//临时姓名printf("提示:当学号为0时则终止添加,并返回主界面,姓名长度不能超过4个字\n\n");//输出提示信息p1=head;while (p1->next != NULL)//寻找链表尾,找到后将p1指向链表尾以接受学生信息的添加ﻩ{ﻩp1 =p1->next;ﻩi++;ﻩ}do {ﻩﻩp1->sno =0;sno:ﻩprintf("请输入学生%d学号与姓名[格式:学号,姓名]:",i);ﻩﻩfflush(stdin);//清空键盘缓冲区ﻩﻩif(scanf("%d,%s",&tempsno,&tempname) == 2)ﻩﻩ{ﻩ;}ﻩﻩelseﻩﻩ{ﻩﻩprintf("输入格式错误!请重新输入T_T\n");ﻩsystem("pause");ﻩgoto sno;ﻩ}ﻩif(tempsno!= 0){ﻩﻩif(is_sno(head,tempsno) == false)//判断学号是否存在ﻩﻩﻩ{ﻩp1->sno= tempsno;ﻩﻩ}ﻩﻩelse {ﻩprintf ("学号[%d]已存在!!!\n",tempsno);ﻩﻩgoto sno;ﻩ}}ﻩelse{ﻩcontinue;ﻩﻩ}printf("---------------------------------------------\n");ﻩprintf("请输入学生%d成绩(语文,数学,英语,C语言,体育,以逗号分隔):",i);ﻩﻩfor(n=0;n<=4;n++)//成绩数组赋初值ﻩ{ﻩﻩscorearr[n]=0;ﻩ}fflush(stdin);//清空键盘缓冲区ﻩﻩscanf("%d,%d,%d,%d,%d",&scorearr[0],&scorearr[1],&scorearr[2],&scorearr[3],&scorearr[4]);ﻩprintf("*********************************************\n");//检测输入合法性ﻩif(p1->sno== 0)ﻩﻩ{ﻩ;}ﻩelseif(p1->sno < 1 ||p1->sno>MAX_SNO)//判断学号是否合法,(1~200){ﻩprintf("学号输入不合法,学号为1-%d之间的数包括(1,%d)!!!\n",MAX_SNO,MAX_SNO);ﻩﻩﻩsystem("pause");ﻩcontinue;ﻩ}else//判断成绩合法性ﻩ{ﻩfor(n=0;n<=4;n++)//检测成绩录入合法性ﻩﻩﻩ{ﻩﻩif (scorearr[n]<0 ||scorearr[n]>MAX_SCORE)ﻩﻩ{ﻩﻩprintf("成绩输入不合法或成绩数值输入错误,各科成绩应为0-%d之间的数包括(0,%d)!!!\n",MAX_SCORE,MAX_SCORE);ﻩﻩﻩsystem("pause");ﻩﻩﻩcontinue;ﻩﻩﻩ}ﻩ}ﻩﻩﻩp1->sno= tempsno;p1->chinese= scorearr[0];p1->math = scorearr[1];ﻩﻩﻩp1->english= scorearr[2];ﻩﻩp1->clanguage = scorearr[3];ﻩﻩp1->tiyu =scorearr[4];ﻩstrcpy(p1->name ,tempname);ﻩ//求总成绩ﻩﻩp1->score=scorearr[0]+scorearr[1]+scorearr[2]+scorearr[3]+scorearr[4];ﻩﻩﻩﻩ}ﻩif(p1->sno!= 0){p1->next =(struct ryb*)malloc(LEN);//create一个新节点给p1->nextp1 = p1->next;//将新节点地址给p1p1->next = NULL;//↑ﻩﻩ}else{ﻩﻩp1->sno =0;ﻩ}i++;ﻩ}while(p1->sno!= 0);//判断学号是否为0;为0退出添加ﻩreturnhead;}#if(1)void put_ryb(struct ryb* head)//输出学号及成绩(欲输出链表头){struct ryb *pryb = head;struct ryb zcj;//总成绩int student_num =0;//学生人数ﻩ//初始化总成绩结构体zcj.chinese = 0;zcj.clanguage= 0;ﻩzcj.english= 0;ﻩzcj.math=0;ﻩzcj.tiyu = 0;//初始化ENDﻩsystem("cls");printf (" --------------\n");printf("|某班学生成绩表|\n");printf("--------------\n");printf ("-------- ---- ---- ------------- --------------\n");printf("|学号||姓名||语文| |数学| |英语| |C语言||体育||总成绩| |平均成绩|\n");ﻩprintf("-------- ---- ------------- ---- ------ --------\n");//8,8,8,8,9,8,10,12do{ﻩif(pryb->sno != 0&&pryb->math>= 0 && pryb->math <=MAX_SNO)//输出成绩ﻩ{ﻩprintf("%-8d%-8s%-8d%-8d%-8d%-9d%-8d%-10d%-12d\n",pryb->sno,pryb->name,pryb->chinese,pryb->math,ﻩ pryb->english,pryb->clanguage,pryb->tiyu,pryb->score,pryb->score / 5);zcj.chinese = zcj.chinese +pryb->chinese;//计算各科总成绩ﻩﻩzcj.clanguage = zcj.clanguage+pryb->clanguage ;ﻩﻩzcj.english=zcj.english + pryb->english;ﻩﻩzcj.math= zcj.math + pryb->math;ﻩﻩzcj.tiyu =zcj.tiyu+ pryb->tiyu ;ﻩstudent_num++;//记录总学生人数,表示链表不为空:ﻩpryb=pryb->next;}ﻩ}while(pryb->next &&pryb->math >= 0 &&pryb->math<= MAX_SNO);if (student_num >=1)//判断链表是否为空ﻩ{ﻩprintf ("\n\n[总平均成绩]:(语文:%d,数学:%d,英语:%d,C语言:%d,体育:%d)\n",zc j.chinese/student_num, zcj.math / student_num,ﻩﻩzcj.english / student_num,zcj.clanguage /student_num , zcj.tiyu/ student_num);//输出总平均成绩}else{ﻩprintf ("没有可以输出列表!\n\n");}ﻩ}#endifbool is_sno(struct ryb* head,int sno)//判断学号是否存在(头指针,学号),如学号存在返回true,不存在返回false{structryb *p;ﻩp=head;ﻩdo {ﻩif(p->sno ==sno)ﻩ{ﻩﻩreturn true;ﻩ}ﻩﻩif (p->next != NULL){ﻩﻩp = p->next;ﻩ}}while(p->next!=NULL);ﻩreturnfalse;}//排序函数排序使用冒泡算法struct ryb* order(struct ryb *head,enumordertype type, intfs)//排序函数;(链表头,排序方式(asc或desc),排序类型(1为按学号,2为按总成绩)){structryb*p,*rp,*ptemp,*rph;//要排序的链表,要返回的链表,临时排序链表,要返回的链表头int max,min;ﻩint pro_mess;//删除函数处理结果1,0if(head->sno==0)ﻩ{ﻩreturn head;}p = head;ﻩmax =0,min= 0;ﻩrp=(structryb *) malloc(LEN);//create一个新节点给rp ﻩrph = rp;do{ptemp = p;if(fs == 1)//按学号ﻩ{ﻩﻩﻩmax=ptemp->sno;//赋初值ﻩmin= ptemp->sno;ﻩ}ﻩelse { //按成绩ﻩmax=ptemp->sno;ﻩﻩmin= ptemp->score;ﻩmax = ptemp->score;ﻩﻩ}ﻩrp->sno= ptemp->sno;ﻩrp->score=ptemp->score;ﻩrp->tiyu =ptemp->tiyu;ﻩrp->english =ptemp->english;ﻩrp->chinese= ptemp->chinese ;rp->math =ptemp->math ;ﻩrp->clanguage=ptemp->clanguage ;ﻩﻩstrcpy(rp->name , ptemp->name) ;do{if(type == desc)//降序ﻩ{if(fs==1)//按学号ﻩ{ﻩﻩﻩif(ptemp->sno >max)ﻩﻩﻩﻩ{ﻩﻩﻩmax = ptemp->sno;ﻩﻩrp->sno= ptemp->sno ;ﻩﻩﻩﻩﻩrp->score =ptemp->score ;ﻩﻩﻩrp->tiyu =ptemp->tiyu ;ﻩﻩﻩrp->english = ptemp->english;ﻩﻩrp->chinese=ptemp->chinese ;ﻩﻩrp->math= ptemp->math;ﻩﻩﻩﻩrp->clanguage = ptemp->clanguage ;strcpy(rp->name, ptemp->name);}ﻩﻩﻩ}ﻩelse if (fs ==2)//按成绩ﻩﻩ{ﻩif(ptemp->score > max)ﻩ{ﻩﻩmax = ptemp->score;ﻩﻩrp->sno= ptemp->sno;ﻩﻩrp->score =ptemp->score;ﻩﻩﻩrp->tiyu= ptemp->tiyu ;ﻩﻩﻩﻩrp->english =ptemp->english;ﻩﻩﻩrp->chinese =ptemp->chinese;ﻩﻩﻩrp->math=ptemp->math ;ﻩﻩrp->clanguage = ptemp->clanguage;ﻩﻩﻩstrcpy(rp->name ,ptemp->name);}ﻩﻩ}ﻩﻩ}ﻩﻩif(type== asc)//升序{ﻩﻩﻩif(fs ==1)//按学号ﻩﻩ{ﻩﻩif(ptemp->sno <min)ﻩﻩﻩ{ﻩﻩmin =ptemp->sno;ﻩrp->sno = ptemp->sno;ﻩﻩﻩﻩrp->score=ptemp->score ;ﻩﻩrp->tiyu= ptemp->tiyu ;ﻩﻩﻩrp->english=ptemp->english;ﻩﻩﻩrp->chinese = ptemp->chinese;ﻩﻩrp->math = ptemp->math ;ﻩrp->clanguage = ptemp->clanguage;ﻩstrcpy(rp->name , ptemp->name);ﻩﻩ}ﻩ}ﻩelse if(fs== 2)//按成绩ﻩﻩ{ﻩﻩif(ptemp->score <min)ﻩ{ﻩﻩmin =ptemp->score;ﻩrp->sno= ptemp->sno ;ﻩﻩrp->score =ptemp->score ;ﻩﻩﻩrp->tiyu = ptemp->tiyu ;ﻩﻩﻩﻩrp->english =ptemp->english ;ﻩﻩﻩrp->chinese =ptemp->chinese ;ﻩﻩﻩrp->math= ptemp->math ;ﻩﻩrp->clanguage = ptemp->clanguage;ﻩﻩstrcpy(rp->name, ptemp->name) ;ﻩﻩﻩ}ﻩﻩ}ﻩ}ptemp=ptemp->next ;}while(ptemp->next !=NULL);p=del_item_ryb(p,rp->sno,&pro_mess);ﻩrp->next=(struct ryb*) malloc(LEN);//create一个新节点给rp->next rp = rp->next ;ﻩif(p->next==NULL){//添加链表尾信息链表尾为一个指向NULL的空结构,以表示链表结束ﻩrp->score = 0;ﻩrp->sno=0;rp->next=NULL;ﻩ}}while(p->next!= NULL);return rph;//返回排序后链表头}//排序函数END;------------------------------------------------------------------------------boolsave_data(struct ryb * head)//保存链表数据函数(欲保存链表头),成功返回true,失败返回false{ﻩFILE *fp;struct ryb * p;p= head;ﻩif (head->sno== 0)//如果链表为空ﻩ{ﻩreturn false;//返回false}ﻩfp = fopen(DATAFILE, "wb+");//打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。

c语言学生成绩治理系统(链表版)

c语言学生成绩治理系统(链表版)

#include <>#include <>#include <>#include <>#include <>#include <>#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;...");printf("\n\n\n\n\t\t\t┏━━━━━━━━━━┓\n");printf("\t\t\t┃┃\n");printf("\t\t\t┗━━━━━━━━━━┛\n");gotoxy(26, 7);for ( i = 0; i < 10; i++){printf("█");Sleep(100);}pHead = createListHead();readListWithFile(pHead, "");return pHead;}Student *createListHead(void){Student *pHead;pHead = (List)malloc(sizeof(Student));pHead->next = NULL;return pHead;}void readListWithFile(Student *pHead, char *file_name) {FILE *fp;Student *p1, *p2;int count, rank = 0;StudentDate dat;char stu_name[20];fp = fopen(file_name, "r");if (fp == NULL){fp = fopen(file_name, "w");fclose(fp);return;}fseek(fp, 0L, 2);count = ftell(fp);p1 = pHead;fp = fopen(file_name, "r");while (!feof(fp)){p2 = (List)malloc(sizeof(Student));fscanf(fp, "%d%s %c%f%f%f%f%f\n", &p2->, p2->name, &p2->, &p2->, &p2->, &p2->, &p2->, &p2->;p2-> = (double)(p2-> + p2-> + p2-> +p2-> + p2->;p2-> = p2-> / 5;p2->next = NULL;p1->next = p2;p1 = p2;if (ftell(fp) == count){break;}}f %.1f %.1f %.1f %.1f\n", p1->, p1->name, p1->, p1->,p1->, p1->, p1->, p1->;printf("是不是继续添加?(Y/N)");bum = getch();if (bum == 'n' || bum == 'N'){break;}}f %.1f %.1f %.1f %.1f\n", pHead->, pHead->name, pHead->, pHead->,pHead->, pHead->, pHead->, pHead->;pHead = pHead->next;}fclose(fp);}void alterStudentInfo(Student *pHead){int bum, count = 0, j = 0;int num;char student_name[20];Student *p1 = pHead->next;system("title 学生成绩统计系统-修改");f,没有达抵达到平均分的学生有┃\n", aver_score[0]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[0]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t数学的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[1]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[1]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t英语的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[2]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[2]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t化学的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[3]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[3]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;p1 = pHead->next;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t物理的平均分为:%.1f,没有达抵达到平均分的学生有┃\n", aver_score[4]);printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");while (p1){if (p1-> < aver_score[4]){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}printf(" ┗━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┛\n");printf("\t\t\t\t\t\t该班一共%d个人!", count);}else{if (bum == 2){bad = 0;printf("\n\n ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf(" ┃\t\t\t\t语文成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t数学成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t英语成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t化学成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃%┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}bad = 0;printf(" ┣━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┫\n");printf(" ┃\t\t\t\t物理成绩大于90分或小于60的学生有┃\n");printf(" ┣━━━┳━━━━┳━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━┫\n");printf(" ┃学号┃姓名┃性别┃语文┃数学┃英语┃化学┃物理┃平均分┃总分┃名次┃\n");printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");p1 = pHead->next;while (p1){if (p1-> < 60 || p1-> >= 90){if (bad == 0){printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}else{printf(" ┣━━━╋━━━━╋━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━┫\n");printf(" ┃%-5d┃%-6s ┃%c ┃% ┃% ┃% ┃% ┃% ┃% ┃% ┃%-3d┃\n", p1->,p1->name, p1->, p1->, p1->,p1->, p1->, p1->, p1->, p1->, p1->rank);}bad = 1;}p1 = p1->next;}printf(" ┗━━━┻━━━━┻━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━┛\n");}else{if (bum == 3){return;}else{statisStudentInfo(pHead);}}}getch();}int statisMenu(void){int bum;system("CLS");printf("\n\n\n");printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");printf("\t\t┃以什么方式统计学生信息?┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 1 按平均分┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 2 按是不是合格┃\n");printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");printf("\t\t┃ 3 返回主菜单┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");printf("请按键选择:");bum = (int)(getch() - '0');system("CLS");return bum;}void inputData(Student *pHead, Student *node){Student *p1 = node, *p2, *p3 = pHead;system("CLS");printf("\n\n\t请依次输入学生的学号、姓名、性别、语文、数学、英语、化学、物理成绩\n");printf("\t注意:姓名不能有空格,性别男用M表示,女佣W表示,\n\t各科成绩应该大于0小于100,输入数据时请用空格隔开\n");scanf("%d%s %c%f%f%f%f%f", &p1->, p1->name, &p1->, &p1->, &p1->, &p1->, &p1->, &p1->;// 判定输入的学号是不是已经存在p2 = p3->next;while (1){if (p2 == NULL){break;}if (p2-> == p1-> && p2 != node){printf("该学号已存在,请从头输入学号:");scanf("%d", &p1->;p2 = p3->next;}else{p2 = p2->next;}}//性别是不是合法while (1){if (p1-> != 'W'&& p1-> != 'M'){p1-> = getchar();printf("性别输入不合法,请从头输入: ");p1-> = getchar();}else{break;}}//成绩是不是合法while (1){if (p1-><0 || p1-> >100){printf("语文成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("数学成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("英语成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("化学成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-><0 || p1-> >100){printf("物理成绩输入不合法,请从头输入:");scanf("%f", &p1->;}if (p1-> >= 0 && p1-> <= 100 && p1-> >= 0&& p1-> <= 100&& p1-> >= 0 && p1-> <= 100&& p1-> >= 0 && p1-> <= 100&& p1-> >= 0 && p1-> <= 100){break;}}p1-> = (double)(p1-> + p1-> + p1-> +p1-> + p1->;p1-> = p1-> / 5;}。

C语言程序设计课程设计-基于链表的学生成绩管理系统

C语言程序设计课程设计-基于链表的学生成绩管理系统

C语言程序设计课程设计-基于链表的学生成绩管理系统华北科技学院计算机系综合性实验实验报告课程名称 C语言程序设计实验学期 2012 至 2013 学年第二学期学生所在系部计算机学院年级 2012 专业班级计算机科学与技术B-123 学生姓名学号任课教师实验成绩计算机系制华北科技学院计算机系综合性实验报告实验报告须知1、学生上交实验报告时,必须为打印稿(A4纸)。

页面空间不够,可以顺延。

2、学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。

3、教师应该填写的内容包括:实验成绩、教师评价等。

4、教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。

综合性实验中,所涉及的程序,文档等在交实验报告前,拷贝给任课教师。

任课教师统一刻录成光盘,与该课程的期末考试成绩一同上交到系里存档。

5、未尽事宜,请参考该课程的实验大纲和教学大纲。

第 1 页华北科技学院计算机系综合性实验报告《C语言程序设计》课程综合性实验报告开课实验室:基础六 2013年7月1 日实验题目基于链表的学生成绩管理系统一、实验目的1、掌握链表的创建、遍历显示和清除;2、掌握链表数据的文件保存、读取;二、设备与环境微型计算机、VC++6.0三、实验内容1、定义结构体,创建链表struct xsnode{int xh;char xm[15];int gs;int yy;int wl;struct xsnode *next;};2、根据以上链表结点结构,实现以下功能a、学生学号、姓名、各门成绩的录入;b、链表数据显示及清除;c、链表数据的文件保存与读取;四、实验结果及分析1、运行结果第 2 页华北科技学院计算机系综合性实验报告2.源代码:#include "stdio.h" #include "string.h" #include "stdlib.h" #include "conio.h" #include "malloc.h" struct xs{int xh;char xm[15];int gs,yy,wl;struct xs *next; };第 3 页华北科技学院计算机系综合性实验报告int num=0;struct xs *init(){struct xs *hd;hd=(struct xs *)malloc(sizeof(struct xs )); hd->next=NULL;return hd;}void fr(struct xs *hd){struct xs*p;while(hd->next!=NULL){p=hd->next;hd->next=p;free(p);}}//释放void create(struct xs *hd) {char a[15];int xh,c,g,h,i;struct xs *p;fr(hd);printf("\n请输入学生个数\n");scanf("%d",&num);for(i=1;i<=num;i++){printf("第%d个学生of%d",i,num);printf("学号");第 4 页华北科技学院计算机系综合性实验报告scanf("%d",&xh);printf("名字");scanf("%s",&a);printf("高数");scanf("%d",&c);printf("英语");scanf("%d",&g);printf("物理");scanf("%d",&h);p=(struct xs*)malloc(sizeof(struct xs)); p->xh=xh;strcpy(p->xm,a);p->gs=c;p->yy=g;p->wl=h;p->next=hd->next;hd->next=p;}printf("录入完毕按任意键继续~ \n");getch();}//创建链表,输入成绩。

学生成绩管理系统 c语言 链表

学生成绩管理系统 c语言 链表

程序代码如下:#include<stdio.h>#include<malloc.h>#define LEN sizeof(struct student)struct student \\首先,建立一个结构体,包括成员学号和3个成绩{int num;float s1;float s2;float s3;struct student * next; \\ 指针来创建单向链表};int n; \\ n是链表中节点的数目struct student * creat() \\这是链表的创建函数,用于录入学生成绩{struct student *head,*p1,*p2;n=0;p1=p2=(struct student*)malloc(LEN);scanf("%d,%f,%f,%f",&p1->num,&p1->s1,&p1->s2,&p1->s3);head=NULL;while(p1->num!=0){n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct student*)malloc(LEN);scanf("%d,%f,%f,%f",&p1->num,&p1->s1,&p1->s2,&p1->s3);}p2->next=NULL;return (head);}void print (struct student * head) \\ 这是链表的输出,用于查看整个学生成绩{void menufunction(struct student * p3);struct student * p;printf("\n学生成绩如下:\n");printf("学号语文数学英语\n");p=head;if(head!=NULL)do{printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3);p=p->next;}while(p!=NULL);menufunction(head); \\菜单功能的一个函数,用它来控制整个菜单界面的进行}struct student * del(struct student * head, int num) \\ del函数用作删除节点{void menufunction(struct student * p3);struct student *p1, *p2;if(head==NULL){printf("\nlist null! \n");return(head);}p1=head;while(num!=p1->num && p1->next!=NULL){p2=p1;p1=p1->next;}if(num==p1->num){if(p1==head) head=p1->next ;else p2->next=p1->next ;printf("delete:%d\n",num);n=n-1;}else printf("%d can't been found!\n",num);return(head);menufunction(head);}struct student *insert (struct student * head,struct student * stud) \\ insert函数用作创建节点{void menufunction(struct student * p3);struct student * p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){head=p0;p0->next =NULL;}else {while((p0->num>p1->num)&&(p1->next!=NULL)){p2=p1; p1=p1->next ;}if(p0->num <=p1->num){if(head==p1) head=p0;else p2->next =p0;p0->next =p1;}else {p1->next=p0;p0->next=NULL;}}n=n+1;menufunction(head);return(head);}void x() \\用于界面制作的函数{ printf(" \n");printf("**********************************************************\n");}void s(struct student * head,int nu) \\这是一个查找的函数{struct student *p;void menufunction(struct student * p3);for(p=head;p->next!=NULL;p=p->next ){if(p->num==nu){printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3); break;}}if(p->num==nu)printf("%d %5.1f %5.1f %5.1f\n",p->num,p->s1,p->s2,p->s3); menufunction(head);}void menufunction(struct student * p3) \\用作界面菜单的函数{struct student * stu;int del_num,i,j; \\创建一个菜单,具有良好界面printf("**********************************************************\n"); printf(" 1.查看所有学生成绩\n");printf(" 2.删除个人成绩\n");printf(" 3.增加个人成绩\n");printf(" 4.查找个人成绩\n");printf(" 0.返回\n");printf("请选择要执行的功能0~4:");scanf("%d",&i);switch(i) \\wsitch语句来控制数字功能{case 1: x();print(p3);break;case 2: x(); printf("\n输入要删除的学号(如110):");scanf("%d",&del_num);while(del_num!=0){p3=del(p3,del_num);print(p3);printf("确认退出0:");scanf("%d",&del_num);} break;case 3: x(); printf("\n输入要插入的信息(如110,1,2,3):");stu=(struct student * )malloc(LEN);scanf("%d,%f,%f,%f",&stu->num,&stu->s1,&stu->s2,&stu->s3);while(stu->num!=0){p3=insert(p3,stu);print(p3);printf("确认退出0:");stu=(struct student * )malloc(LEN);scanf("%d,%f,%f,%f",&stu->num,&stu->s1,&stu->s2,&stu->s3);}break;case 4: x(); printf("输入要查找的学号(如110):");scanf("%d",&j);printf("学号语文数学英语\n");s(p3,j);break;case 0 : x(); printf("返回\n");break;default : printf("error!\n"); break;}}void main() \\main函数{struct student * head,* p3;printf("**************欢迎来到学生成绩管理系统**************:\n"); printf("请先输入学生成绩(如110,1,2,3):\n");head=creat();p3=head;menufunction(p3);printf(" 0.退出\n");}测试结果如图:先录入了5个学生的成绩良好的操作界面查看所有成绩(输出整个链表)现在删除学号为105的学生成绩,并查看成绩(增加个人成绩类似)查找个人成绩,输入学生学号,输出其成绩选0 返回菜单,再输入,则退出系统。

学生成绩管理系统C(链表)语言

学生成绩管理系统C(链表)语言

学⽣成绩管理系统C(链表)语⾔#include"stdio.h"#include"stdlib.h"#include"string.h"//⽤于调⽤⼀些函数struct person {char name[20];int ID;int chinese;int english;int math;struct person *next; //连接处的指针}; //由于create⾥⾯就有initialize所以先把initialize放在前⾯void initialize(struct person *p, int num) { //初始化链表⾥⾯的值printf("innitialize person %d\n name is:", num); //num⽤于计⼊输⼊的第⼏个同学scanf_s("%s", &p->name, sizeof(p->name));getchar();printf("ID:");scanf_s("%d", &p->ID);getchar();printf("chinese:");scanf_s("%d", &p->chinese);getchar();printf("math:");scanf_s("%d", &p->math);getchar();printf("english:");scanf_s("%d", &p->english);getchar();}struct person *create(int len) {int num = 0;struct person *h = 0, *c, *pre = 0;while (num < len) {c = (struct person*)malloc(sizeof(struct person)); //malloc取内存 sizeof为这个内存的⼤⼩然后转化成指针if (num == 0) { h = c; pre = c; } // 如果num=0 h存下了⾸地址为以后拿做准备c->next = NULL;if (num) {pre->next = c; //pre为前⼀块内存的地址把后⼀块的⾸地址赋给前⼀块的尾pre = c; //收尾连接后 pre指前⼀块的功能就完成了然后再指向现在的内存为下⼀次拿内存、赋地址做准备}initialize(c, num); //每取⼀块地址就去输⼊⼀次++num;}return h;}void traverse(struct person *head) {int index = 1; // ⽤于计数第⼏个学⽣while (head != NULL) { //同样⼀直到后⾯没有地址结束printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d\t math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math); head = head->next; //前⼀个输完后就要指向下⼀块地址++index;}}int getlength(struct person *head) {int num = 0;while (head != NULL) { //当head指向后⾯没有了它就是NULL 结束++num;head = head->next; //如果head 不是NULL ++num后要把head指针指向最后}return num;}//增加学⽣信息void append_node(struct person *h) {struct person *t = h, *p;while (t->next != NULL) {t = t->next;}p = (struct person *)malloc(sizeof(struct person));initialize(p, 0);p->next = NULL;t->next = p;traverse(h);}//删除struct person * delete_ID(struct person *head, int ID, int len) {struct person *t = head;struct person *temp;for (int i = 0; i < (len - 1); ++i) {if (i == 0) {if (head->ID == ID) { head = head->next; free(t); traverse(head); return head; }if ((t->next)->ID == ID) {temp = t->next;t->next = (t->next)->next;free(temp); traverse(head); return head;}}if (i != 0) {if ((t->next)->ID == ID) {temp = t->next;t->next = (t->next)->next;free(temp); traverse(head); return head;}t = t->next;}}return head;}//学号查询void search_ID(struct person *head, int ID) {while (head != NULL) {if (head->ID == ID) {printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math);}head = head->next;}}//姓名查询void search_name(struct person *head, char name[20]) {while (head != NULL) {if ((strcmp(head->name, name)) == 0) { printf("name is: %s\t ID is:%d\t chinese is:%d\t englishi is:%d math is:%d\n", head->name, head->ID, head->chinese, head->english, head->math); } head = head->next;}}//指定学⽣修改void change(struct person *head, char name[20]) {while (head != NULL) {if (strcmp(head->name, name) == 0) {printf(" name is:");scanf_s("%s", &head->name, sizeof(head->name));getchar();printf("ID:");scanf_s("%d", &head->ID);getchar();printf("chinese:");scanf_s("%d", &head->chinese);getchar();printf("english:");scanf_s("%d", &head->english);getchar();printf("math:");scanf_s("%d", &head->math);getchar();}head = head->next;}traverse(head);}//数学分数平均数int average_math(struct person *head, int len) {int i = 0, sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->math;t = t->next;}average = (sum / len);return average;}//英语分数平均数int average_english(struct person *head, int len) {int i = 0, sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->english;t = t->next;}average = (sum / len);return average;}//语⽂分数平均数int average_chinese(struct person *head, int len) {int sum = 0, average;struct person *t = head;while (t != NULL) {sum += t->chinese;t = t->next;}average = (sum / len);return average;}//成绩区间统计int statistics_math(struct person*head, int min, int max) {int conter = 0;while (head!= NULL) {if (head->math >= min&&head->math <= max) {++conter;printf("name:%s math score:%d\n", head->name, head->math);}head = head->next;}return conter;}int statistics_chinese(struct person*head, int min, int max) {int conter = 0;while (head != NULL) {if (head->chinese >= min&&head->chinese <= max) {++conter;printf("name:%s chinese score:%d\n", head->name, head->chinese);}head = head->next;}return conter;}int statistics_english(struct person*head, int min, int max) {int conter = 0;while (head != NULL) {if (head->english >= min&&head->english <= max) {++conter;printf("name:%s english score:%d\n", head->name, head->english);}head = head->next;}return conter;}//某名学⽣的平均成绩int average_name(struct person*head, char name[20]) {int av = 0;while (head != NULL) {if (strcmp(head->name, name) == 0) { av += head->math; av += head->chinese; av += head->english; } head = head->next;}av = av / 3;return av;}//排序数学void rank_math(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->math) >(pre->math)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}//排序语⽂void rank_chinese(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->chinese) >(pre->chinese)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}//排序英语void rank_english(struct person *h, int len) {struct person *t = h, *pre = h;int i, math, chinese, english,ID;char name[20];t = t->next;for (i = 0; i < (len - 1); ++i) {while (t != NULL) {if ((t->english) >(pre->english)) {ID = t->ID; t->ID = pre->ID; pre->ID = ID;math = t->math; t->math = pre->math; pre->math = math;strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);chinese = t->chinese; t->chinese = pre->chinese; pre->chinese = chinese;english = t->english; t->english = pre->english; pre->english = english;}t = t->next;}pre = pre->next; t = pre->next;}traverse(h);}void release(struct person *head) {struct person *n; //需要⼀个指针存着下⼀个地址while (head != NULL) {n = head->next; //把n指向下⼀块要释放的地址free(head);head = n; //然后再把head从前⼀个地址移到下⼀个地址}}//取长度int getlen(struct person *head) {int conter = 0;struct person*t = head;while (t != NULL) {++conter;t = t->next;}return conter;}//存⼊⽂件void openfile(struct person *head, int len) {FILE *fp;struct person*t = head;errno_t err;int temp;char str[100];char s[10];if ((err = fopen_s(&fp, "D:\\学⽣信息", "w")) != 0){printf("⽂件打开错误\n");}else{printf("⽂件打开成功\n");}for (int i = 0; i < len; ++i) {strcpy_s(str, t->name);fputs("name:", fp);fputs(str, fp);fputs(": ", fp);fputs("ID:", fp);sprintf_s(s, "%d", t->ID);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->chinese);fputs("chinese:", fp);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->math);fputs("math:", fp);fputs(s, fp);fputs("", fp);sprintf_s(s, "%d", t->english);fputs("english:", fp);fputs(s, fp);fputs("\n", fp);t = t->next;}return;}void menu(struct person *head, int len) {int m = 0;int min, max;int ID = 0;int conter = 0;char name[20];while (1) {printf(" 请选择您需要的操作:\n");printf(" 0. 遍历学⽣信息\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");printf(" 12. 某个学⽣的三科平均成绩\n");printf(" 13. 按语⽂成绩从⾼到低排序\n");printf(" 14. 按数学成绩从⾼到低排序\n");printf(" 15. 按英语成绩从⾼到底排序\n");printf(" 16. 结束功能并把信息写⼊⽂件中\n");scanf_s("%d", &m);switch (m) {case0: traverse(head); break;case1: append_node(head); break;case2: {printf("要删除学⽣信息的学号:");scanf_s("%d", &ID);head=delete_ID(head, ID, getlen(head)); }break;case3: {printf("需要修改学⽣信息的同学姓名:");scanf_s("%s", &name, sizeof(name));change(head, name); }break;case4: {printf("search by name:");scanf_s("%s", &name, sizeof(name));search_name(head, name); }break;case5: {printf("学号查询:");scanf_s("%d", &ID);search_ID(head, ID); }break;case6: {printf("请输⼊语⽂成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("语⽂成绩在区间%d到%d之间的学⽣:%d⼈\n", min, max, statistics_chinese(head, min, max)); }break;case7: {printf("请输⼊数学成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("数学成绩在区间%d到%d之间的学⽣:%d⼈\n", min, max, statistics_math(head, min, max)); }break;case8: {printf("请输⼊英语成绩的区间:");printf("min=");scanf_s("%d", &min);printf("max=");scanf_s("%d", &max);printf("英语成绩在区间%d到%d之间的学⽣:共有%d⼈\n", min, max, statistics_english(head, min, max)); }break;case9: { printf("average of chinese is%d", average_chinese(head, getlen(head))); }break;case10: { printf("average of math is%d", average_math(head, getlen(head))); }break;case11: { printf("average of english is%d", average_english(head, getlen(head))); }break;case12: {printf("请输⼊学⽣的姓名:");scanf_s("%s", &name, sizeof(name));printf("%s 的平均成绩为:%d", name, average_name(head, name)); }break;case13: {printf("按照语⽂成绩从⾼到底排序:");rank_chinese(head, getlen(head)); }break;case14: {printf("按照数学成绩从⾼到底排序:");rank_math(head, getlen(head)); }break;case15: {printf("按照英语成绩从⾼到底排序:");rank_english(head, getlen(head)); }break;case16: openfile(head, getlen(head)); return;}}}int main() {struct person *head;int len;int min, max;int ID = 0;char name[20];printf("请输⼊学⽣信息");printf("学⽣⼈数:");scanf_s("%d", &len); //输⼊要取的地址多少head = create(len); // 创建地址在create⾥⾯就有初始复制函数嵌套traverse(head); //遍历menu(head, getlen(head));release(head); //释放内存system("pause");return0;}。

c语言程序设计学生成绩管理系统报告

c语言程序设计学生成绩管理系统报告

C语言程序设计学生成绩管理系统报告引言随着计算机技术的发展,C语言作为一种高级程序设计语言,被广泛应用于各个领域。

在教育领域中,C语言的学习也越来越重要。

为了提高学生在C语言程序设计方面的能力,快速准确地管理学生成绩,我们设计了一个C语言程序设计学生成绩管理系统。

设计目标•实现学生成绩的录入、查询、修改和删除功能。

•提供直观、友好的用户界面,操作简便明了。

•保证系统的安全性,仅授权用户可进行操作。

•能够生成学生成绩报告和统计信息,方便教师和学生进行分析和参考。

系统设计与实现数据结构为了实现学生成绩的管理,我们采用了以下的数据结构:1.学生信息结构体–学号–姓名–年龄–性别–成绩typedef struct {int student_id;char name[20];int age;char gender[10];float score;} Student;2.学生信息链表–指向学生信息的指针–指向下一个学生信息的指针typedef struct Node {Student* student_info;struct Node* next;} StudentNode;功能实现录入学生信息1.输入学生信息,并验证合法性(如学号是否已存在)。

2.将学生信息加入学生信息链表中。

查询学生信息1.输入学号或姓名进行查询。

2.在学生信息链表中查找匹配的学生信息。

3.显示查找到的学生信息。

修改学生信息1.输入学号或姓名进行查询。

2.在学生信息链表中查找匹配的学生信息。

3.若找到匹配的学生信息,则修改其中的字段内容。

删除学生信息1.输入学号或姓名进行查询。

2.在学生信息链表中查找匹配的学生信息。

3.若找到匹配的学生信息,则删除该节点。

生成报告和统计信息1.遍历学生信息链表,计算平均分、最高分和最低分。

2.根据指定条件(如按性别、按年龄段)进行筛选和排序。

3.根据筛选结果生成学生成绩报告和统计信息。

用户界面设计为了提供友好的用户界面,我们采用了命令行界面(CLI)的设计,用户可通过键盘输入命令进行操作。

学生成绩管理系统代码c语言编写

学生成绩管理系统代码c语言编写

C程序学生管理系统/* Note:Your choice is C IDE */#include"stdio.h"#include"stdlib.h"#include"string.h"typedef struct student//定义学生{char name[10];int number;char sex[2];int math;int eglish;int clanguge;int average;}student;typedef struct unit//定义接点{student date;struct unit *next;}unit;unit* build()//建立链表并返回指针{unit *p;if((p=(unit*)malloc(sizeof(unit)))==NULL) { printf("=>初始化失败!");return 0;}else{p->next=NULL;p->date.number=0;//头结点存放学生人数 printf("初始化成功!\n");return p;}}void add(unit *head)//增加学生{unit *p,*q;int m,n=0;q=head->next;p=(unit*)malloc(sizeof(unit));printf("=>请输入新生姓名!\n");gets(p->);fflush(stdin);printf("=>请输入学号!\n");while(n==0){scanf("%d",&m);fflush(stdin);if(q==NULL) n=1;while(q){if(q->date.number==m){printf("=>你输入的学号与已有同学的学号相同,请重新输入!\n");q=head->next;break;}else{q=q->next;if(q==NULL) n=1;}}}p->date.number=m;printf("=>请输入性别!\n");gets(p->date.sex);fflush(stdin);printf("=>请输入数学成绩\n");scanf("%d",&m);fflush(stdin);p->date.math=m;printf("=>请输入英语成绩\n");scanf("%d",&m);fflush(stdin);p->date.eglish=m;printf("=>请输入c语言成绩\n");scanf("%d",&m);fflush(stdin);p->date.clanguge=m;p->date.average=(p->date.math+p->date.eglish+p->date.clanguge);q=head->next;head->next=p;p->next=q;head->date.number++;}void deletion(unit *head)//删除一名学生{unit *p=head->next,*q=head;char N[10];printf("=>请输入你想删除的学生姓名!\n");gets(N);fflush(stdin);if(p==NULL)printf("=>系统无学生可删除!\n");while(p){if(strcmp(p->,N)==0){q->next=p->next;head->date.number--;printf("=>删除%s成功!\n",p->);free(p);break;}else{p=p->next;q=q->next;if(p==NULL)printf("=>你要删除的学生不存在,删除失败!\n");}}}int display(unit *head)//显示学生信息{unit *p=head->next;int m,n=0;char N[10];if(p==NULL){printf("=>系统无学生!\n");return 0;}while(n==0){printf("********************************************************* *********************\n");printf("=>请选择你的操作!\n");printf("=>\t\t\t1.显示所有\t2.按姓名查找\n\t\t\t3.按学号查找\t4.返回主菜单\n");scanf("%d",&m);fflush(stdin);switch(m){case 1:printf("\n=>该系统拥有%d名学生!\n\n",head->date.number);p=head->next;printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t综合\n\n");while(p){printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);p=p->next;}break;case 2:printf("=>请输入查找姓名!\n");gets(N);fflush(stdin);p=head->next;while(p){if(strcmp(p->,N)==0){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!");}}break;case 3: printf("=>请输入查找学号!\n");scanf("%d",&m);fflush(stdin);p=head->next;while(p){if(p->date.number==m){printf("\t姓名\t学号\t性别\t数学\t英语\tc语言\t 综合\n");printf("\t%s\t%d\t%s\t%d\t%d\t%d\t%d\n",p->,p->date.numb er,p->date.sex,p->date.math,p->date.eglish,p->date.clanguge,p->date.average);break;}else{p=p->next;if(p==NULL)printf("=>你要查的学生不存在!\n");}}break;case 4:n=1;break;}}return 1;}int range(unit *head)//排序{unit *p=head,*q=head->next;int n,i,m=head->date.number;printf("********************************************************* **********************\n");printf("\t\t\t1.按学号\t2.按成绩\n\n");printf("=>请选择操作!\n》");scanf("%d",&n);fflush(stdin);if(q==NULL){ printf("=>无学生可排序!\n");return 0;}switch(n){case 2:for(i=0;i<m;i++)//按总分排序{p=head;q=head->next;while(q->next){if((q->date.average)<(q->next->date.average)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;case 1:for(i=0;i<=m;i++)//按学号排序{p=head;q=head->next;while(q->next){if((q->date.number)>(q->next->date.number)){p->next=q->next;p=p->next;q->next=p->next;p->next=q;}else{p=p->next;q=q->next;}}}break;}printf("=>排序成功!\n");return 1;}void menu(){printf("\n********************************* 主菜单***************************************\n");printf("\t\t\t1.新建系统\t2.添加学生\n\t\t\t3.删除学生\t4.查看信息\n\t\t\t5.排列顺序\t6.读取信息\n\t\t\t7.保存信息\t8.退出系统\n");printf("=>请选择你的操作!\n");}int save(unit *head)//保存{FILE *fp;unit *p;p=head;if((fp=fopen("d:\\学生","wb+"))==NULL){printf("=>保存失败!");return 0;}while(p){fwrite(&(p->date),sizeof(student),1,fp);p=p->next;}printf("=>保存成功!");fclose(fp);return 1;}unit* read()//读入系统学生信息{int i;unit *p,*q,*head;FILE *fp;if((head=(unit*)malloc(sizeof(unit)))==NULL) { printf("=>开辟空间失败!");exit(1);}else{head->next=NULL;head->date.number=0;//头结点存放学生人数}q=head;if((fp=fopen("d:\\学生","rb"))==NULL){printf("=>系统无学生!\n");return 0;}fread(&(q->date),sizeof(student),1,fp);for(i=0;i<head->date.number;i++){if((p=(unit*)malloc(sizeof(unit)))==NULL){ printf("=>读值失败!");exit(1);}fread(&(p->date),sizeof(student),1,fp);p->next=q->next;q->next=p;}fclose(fp);return head;}void main(){int m=0,n, i;unit *head;printf("************************************************************* *******************\n\n");printf("\t\t\t* 欢迎使用学生成绩管理系统 * \n");printf("\n\t\t\t\t\t\t\t\t编译员:岳英明\n\n");printf("=>正在读取系统信息......\n");if((head=read())==0){printf("=>是否新建?\n");printf("\t\t\t是(1)\t\t否(2)\n");scanf("%d",&i);fflush(stdin);if(i==1)head=build();else if(i==2)exit(1);}elseprintf("=>信息导入成功!");while(m==0){menu();scanf("%d",&n);fflush(stdin);switch(n){case 1: head=build();break;case 2:add(head);break;case 3:deletion(head);break;case 4:display(head);break;case 5: range(head);break;case 6:head=read();if(head!=0) printf("=>读取存盘成功!\n");break;case 7:save(head);break;case 8:m=1;break;}}}。

c语言学生成绩管理系统(链表版)

c语言学生成绩管理系统(链表版)

#include <stdio。

h〉#include 〈stdlib.h>#include 〈string。

h>#include 〈conio.h〉#include 〈windows.h〉#include 〈ctype。

h〉#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;//学生基本信息typedef struct student{char name[20];//学生姓名StudentDate one;//学生其他信息int rank;//成绩排名struct student *next;}Student, *List;Student *startCheck(void);//开始检查Student *createListHead(void);//创建链表的头void menu(void);//主菜单void sortList(Student *pHead);//排序链表void readListWithFile(Student *pHead,char *file_name);//从文件中读取数据,并保存在链表中void sorttList(Student *pHead);//排序链表int userChioce(Student *pHead);//用户选择int sortMenu(void);//打印选择菜单void passwordCheck(void);//密码检测void correctWord(void);//修改密码void addStudentInfo(Student *pHead);//向链表的末尾添加数据int scanMenu(void);//浏览菜单void findStudentInfo(Student *pHead);//查找学生信息void delStudentInfo(Student *pHead);//删除某一个学生信息void alterStudentInfo(Student *pHead);//修改学生信息void saveList(Student *pHead);//将链表保存在文件里void printList(Student *pHead);//打印链表void statisStudentInfo(Student *pHead);//查看学生信息int statisMenu(void);//查看菜单void gotoxy(int x, int y);//改变光标位置函数void inputData(Student *pHead,Student *node);//输入信息,并检测是否合法int main(void){Student *pHead;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄SMALL_RECT rc = { 0, 0, 94 —1,30 - 1 };//{Y位置,X位置,宽,高}SetConsoleWindowInfo(hOut, true,&rc);// 重置窗口位置和大小system("color 5B");//设置控制台颜色pHead = startCheck();//读取信息while (1){if (9 == userChioce(pHead))//按9时退出系统{break;}}return 0;}void menu(void){system(”CLS”);//清屏printf(”\n\n\n\t\t\t\t┌─────────────────┐\n”);printf("\t\t\t\t│学生成绩统计系统│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 1 增加学生记录│\n”);printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 2 删除学生记录│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 3 修改学生记录│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 4 查找学生信息│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 5 统计学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 6 查看学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│7 修改登陆密码│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│8 关于│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│9 退出系统│\n”);printf("\t\t\t\t└─────────────────┘\n”);}void gotoxy(int x, int y)//x为列坐标,y为行坐标{COORD pos = {x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut,pos);}Student *startCheck(void){Student *pHead;FILE *fp1;char password[20]= "123456”;int i;if ((fp1 = fopen("password。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北科技学院计算机系综合性实验实验报告课程名称C语言程序设计实验学期2011至2012学年第二学期学生所在系部计算机系年级2011专业班级计算机科学与技术B-111学生姓名学号任课教师实验成绩计算机系制实验报告须知学生上交实验报告时,必须为打印稿(A4纸)。

页面空间不够,可以顺延。

学生应该填写的内容包括:封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。

教师根据本课程的《综合性实验指导单》中实验内容的要求,评定学生的综合性实验成绩;要求在该课程期末考试前将实验报告交给任课教师。

综合性实验中,所涉及 的程序,文档等在交实验报告前,拷贝给任课教师。

任课教师统一刻录成光盘,与 该课程的期末考试成绩一同上交到系里存档。

5、 未尽事宜,请参考该课程的实验大纲和教学大纲。

1、 2、 3、 教师应该填写的内容包括:实验成绩、教师评价等。

4、《c语言程序设计》课程综合性实验报告开课实验室:基础五2012年7月6日实验题目基于链表的学生成绩管理系统、实验目的1、掌握链表的创建、遍历显示和清除;2、掌握链表数据的文件保存、读取;—、设备与环境微型计算机、VC++6.0三、实验内容1、定义结构体,创建链表structxs node in txh;charxm[15];in tgs;in tyy;in twl;structxs no de* next;};2、根据以上链表结点结构,实现以下功能a、学生学号、姓名、各门成绩的录入;b、链表数据显示及清除;C、链表数据的文件保存与读取;四、实验结果及分析1、运行结果主菜单数据显示2、源程序主函数voidmain()intxz=O;structxs*head;head=init();while(xz!=5)menu();sca nf("%d",&xz);switch(xz)easel:create(head);break;case2:print(head);break;case3:save(head);break;case4:read(head);break;case5:printf("\n 系统退出,拜拜!\n");break;default:printf("\n 选择错误,请按任意键选择!\n");getch();break;fr(head);free(head);数据录入源代码voidcreate(structxs*hd)in txh,gs,yy,wl,i;charxm[20];structxs* p;fr(hd);printf("\n 请输入学生个数:");sca nf("%d",&nu m);for(i=0;i vnu m;i++)printf(" 请输入%c个学生of%d\n",i+1,num);prin tf("学号:");scan f("%d",& xh);prin tf(" 姓名:");prin tf("高数:");scan f("%s",xm);scan f("%d",&gs);prin tf("英语:");scan f("%d", &yy);prin tf("物理:");scan f("%d",&wl);p=(structxs*)malloc(sizeof(structxs)); p->xh=xh;strc py(p->xm,xm);p->gs=gs;p->yy=yy;p->wl=wl;p->n ext=hd->n ext;hd->n ext=p;prin tf(" 录入数据完毕,请按任意键继续!\n");getch();添加记录源代码void prin t(structxs*hd) structxs* p;p=hd->n ext;if(p!=NULL)prin tf("\n 数据显示\n");printf("**********************************************\n");printf(" 学号姓名高数英语物理平均分\n");prin tf("高数:");while( p!=NULL)prin tf("%4d",p->xh);prin tf("%10s",p->xm);prin tf("%8d",p->gs);prin tf("%7d",p->yy);prin tf("%6d",p->wl);printf("%8.2f\n",( p->wl+p->wl+p->wl)/3.0);p=p->next;printf("**********************************************\n");prin tf(" 链表显示完毕,请按任意键继续!\n");getch();elseprintf("\n 当前链表为空,请先读取文件或创建链表!\n按任意键继续!\n");查询记录源代码voidme nu()system("cls");printf("****************************************\n");printf("* 学生成绩管理系统(1.0)*\n");printf("****************************************\n");printf("*jb11-131 宋洁2012-7-3*\n");printf("****************************************\n");printf("*1-创建链表*\n");prin tf("****************************************\n"); printf("请选择操作(1-5:");#in clude"stdio.h" #in clude"stdlib.h" #i ncludevstri ng.h> #i nclude"c on prin tf("*2- 数据显示*\n"); prin tf("*3- 保存文件*\n"); prin tf("*4- 读取文件*\n"); prin tf("*5- 系统退出*\n"); 源程序io.h" structxsin txh;charxm[20];in tgs,yy,wl;structxs* next;}; intnum=0;structxs* in it()structxs*hd;hd=(structxs*)malloc( sizeof(structxs));hd-> next=NULL;returnhd;voidfr(structxs*hd)structxs* p;p=hd->n ext;while(hd-> next!=NULL)p=hd->n ext;hd->n ext=p->n ext;free( p); voidcreate(structxs*hd)in txh,gs,yy,wl,i;charxm[20];structxs* p;fr(hd);printf("\n 请输入学生个数:"); sca nf("%d",&nu m);for(i=0;i vnu m;i++)printf(" 请输入%c个学生of%d\n",i+1,num);prin tf("学号:");scan f("%d",& xh);prin tf(" 姓名:");scan f("%s",xm);prin tf("高数:");scan f("%d",&gs);prin tf("英语:");scan f("%d",& yy);prin tf("物理:");scan f("%d",&wl);p=(structxs*)malloc(sizeof(structxs));p->xh=xh;strc py(p->xm,xm);p->gs=gs;p->yy=yy;p->wl=wl;p->n ext=hd->n ext;hd->n ext=p;prin tf(" 录入数据完毕,请按任意键继续!\n"); getch();voidsave(structxs*hd)if(hd-> next!=NULL)structxs* p=hd->n ext;inti;FILE*fp;fp=fo pen( "yh.txt","w");fprin tf(fp,"%3d\n", nu m);for(i=0;i vnu m;i++)fprin tf(fp,"%3d%12s%3d%3d%3d\n", p->xh, p->xm, p->gs ,p->yy, p->wl);p=p->n ext;fclose(fp);prin tf("\n 保存文件完毕,请按任意键继续!\n");getch();elseprin tf("\n 当前链表为空,不需要保存,请按任意键继续!\n");getch();voidread(structxs*hd)inti;structxs* p;FILE*fp;fr(hd);fp=fo pen( "yh.txt","r");fscan f(fp,"%3d\n",&nu m);for(i=0;i vnu m;i++)p=(structxs*)malloc(sizeof(structxs));fscan f(fp,"%3d%12s%3d%3d%3d\n", p->xh, p->xm, p->gs ,p->yy, p->wl);p->n ext=hd->n ext;hd->n ext=p;fclose(fp);prin tf("\n 读取文件完毕,请按任意键继续!\n");getchO;void prin t(structxs*hd) structxs* p;p=hd->n ext;if(p!=NULL)prin tf("\n 数据显示\n");prin tf("**********************************************\n");printf("学号姓名高数英语物理平均分\n");while( p!=NULL)prin tf("%4d", p->xh);prin tf("%10s", p->xm);prin tf("**********************************************\n");prin tf("%8d", p->gs);prin tf("%7d", p->yy);prin tf("%6d", p->wl);prin tf("%8.2f\n",( p->wl+p->wl+p->wl)/3.0);p=p->n ext;prin tf("**********************************************\n");prin tf(" 链表显示完毕,请按任意键继续!\n");getch();elseprintf("\n 当前链表为空,请先读取文件或创建链表!\n按任意键继续!\n");voidme nu()system("cls");prin tf("****************************************\n"); printf("* 学生成绩管理系统(1.0)*\n");prin tf("****************************************\n"); printf("*jb11-131 宋洁2012-7-3*\n");prin tf("****************************************\n"); printf("*1-创建链表*\n");printf("****************************************\n ");printf("请选择操作(1-5:");voidmai n()in txz=O;structxs*head;head=i nit();prin tf("*2- 数据显示*\n"); prin tf("*3- 保存文件*\n"); prin tf("*4-读取文件*\n"); printf("*5- 系统退出*\n");while(xz!=5)menu();sea nf("%d",&xz);switch(xz)easel:create(head);break;case2:print(head);break;case3:save(head);break;case4:read(head);break;case5:printf("\n 系统退出,拜拜!\n");break;default:printf("\n 选择错误,请按任意键选择!\n");getch();break;fr(head);free(head);3、试验收获通过这次试验,我掌握了链表的创建、遍历显示和清除功能,掌握了链表数据的文件保存、读取,能够熟练的使用VC++6.0,对C程序有了更深的了解。

相关文档
最新文档