• c语言学生管理系统链表(实现文件的读入读出功能)


    大一期末作业终于告一段落

    学生管理系统可以用来管理班级学生,能够对学生信息(包括姓名、性别、年龄、成绩等)进行增加、删除、更改、查询等操作。

    该软件将学生信息保存在文件中,直接对文件中的数据进行增删改查操作,除了能够培养您的编程思维,还能让你深入了解文件操作。

    废话不多说,下面贴代码(在VS2012环境下实测可以运行  在dev环境下测试可以运行)

    #define LG (sizeof(struct student))
    struct student
    {
    char name[10];//保存学生姓名
    char sex[5];//保存学生的性别
    long int num;//学号
    int xuhao;//
    int age;
    float score[3];
    float averange;
    char DJ;//存放等级哦
    struct student *next;
    
    };//定义结构体变量保存 名字 性别 年龄 成绩] 结构体声明
    int n;//存放学生人数
    int man;//存放统计的男生数
    int time=3000;//定义全局变量暂停时间
    float JY(float a)//成绩校验函数
    {
    int n=0;
    while(1)
    {
    if(a>100||a<0)
    {
    printf(" 输入成绩有误,范围应该0-100,请重新输入:");
    scanf("%f",&a);
    n=n+1;
    }
    else
    {
    return a;
    }
    }
    }
    struct student *creat(void)// 链表创建函数
    {
    struct student *head;//头指针 
    struct student *p1,*p2,*p3;// 其他指针 
    int mm=0;
    int m=1;
    n=0;
    p1=p2=(struct student *)malloc(LG); // 开辟内存空间 
    if(p1==NULL)
    {
    printf("开辟内存空间失败
    ");
    }
    //内存空间开辟后最后一定要释放
    printf("请先输入学号(输入0退出录入)
    ");
    printf(" ");
    p1->xuhao=m;
    m++;
    scanf("%d",&p1->num);
    if(p1->num!=0)
    {
    printf(" 请输入您的姓名
    ");
    printf(" ");
    scanf("%s",&p1->name);
    printf(" 你好,%s!",p1->name);
    printf("请输入您的性别male or female
    ");
    //mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型
    printf(" ");
    scanf("%s",&p1->sex); 
    mm=sexJY(p1->sex);
    if(mm==1)
    { 
    printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩)
    ");
    printf(" 第一科的成绩是:");
    scanf("%f",&p1->score[0]); 
    p1->score[0]=JY(p1->score[0]);//校验第一科的成绩	
    printf(" 第二科的成绩是:");
    scanf("%f",&p1->score[1]); 
    p1->score[1]=JY(p1->score[1]);//校验第二科的成绩
    printf(" 第三科的成绩是:");
    scanf("%f",&p1->score[2]);
    p1->score[2]=JY(p1->score[2]);//校验第三科的成绩
    printf(" 录入完毕
    ");
    
    _sleep(1000);
    printf("-----------------------------------------------------------------------------------------------------------------
    ");
    
    } 
    } 
    
    head=NULL;
    while(1)
    {
    n=n+1;
    if(n==1) 
    {
    head=p1; 
    } 
    else 
    {
    p3=(struct student *)malloc(LG);
    
    printf("请先输入学号(输入0退出录入)
    ");
    printf(" ");
    p3->xuhao=m;
    m++;
    scanf("%d",&p3->num);
    
    if(p3->num!=0)
    {
    printf(" 请输入您的姓名
    ");
    printf(" ");
    scanf("%s",&p3->name);
    printf(" 你好,%s!",p3->name);
    printf("请输入您的性别male or female
    ");
    printf(" ");
    scanf("%s",&p3->sex); 
    mm=sexJY(p3->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型
    if(mm==1)
    {
    
    printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩)
    ");
    printf(" 第一科的成绩是:");
    scanf("%f",&p3->score[0]); 
    p3->score[0]=JY(p3->score[0]);//校验第一科的成绩	
    printf(" 第二科的成绩是:");
    scanf("%f",&p3->score[1]);
    p3->score[1]=JY(p3->score[1]);//校验第二科的成绩
    printf(" 第三科的成绩是:");
    scanf("%f",&p3->score[2]);
    p3->score[2]=JY(p3->score[2]);//校验第三科的成绩
    printf(" 录入完毕
    ");
    _sleep(1000);
    printf("-----------------------------------------------------------------------------------------------------------------
    ");
    
    p2->next=p3;
    p2=p3;
    printf("%d",n);
    }
    }
    else
    {
    n--;
    break;
    }
    }
    
    }
    
    p2->next=NULL;
    return (head);
    }////结构体链表创
    void body()//界面设计
    { 
    /*
    char stCmd[128];
    sprintf("mode con cols=%d lines=%d", height, width);
    system(stCmd);动态设置窗体大小
    */
    system("mode con cols=120 lines=40");
    //system("color f4");
    printf("
     ----------------------------------------------- 学生成绩管理系统-----------------------------------------------
    "); 
    printf("
    ");
    printf("
    ");
    printf(" ===========================
    ");
    printf(" = 请先输入数据 =
    ");
    printf(" ===========================
    ");
    printf(" 请输入学生的信息,包含姓名、性别、年龄 、语文成绩、数学成绩、外语成绩。
     
     
    ");
    printf(" ---------------------------------------------------------------------------------------------------------------
     "); 
    printf("
    ");
    }
    void body2()//界面设计
    {
    printf("
     ----------------------------------------- 学生成绩管理系统-----------------------------------------------
    "); 
    printf("
    ");
    printf("
    ");
    printf(" ==========================
    ");
    printf(" = 欢迎 =
    ");
    printf(" 该系统共有%d个学生
    ",n);
    printf(" ===========================
    ");
    }
    int showdata(struct student *head)//功能界面,
    {
    struct student *p;
    int sexJY(char *sex);//性别校验函数
    void *dell(struct student *head);//摧毁函数
    struct student *del(struct student *head);
    struct student *del2(struct student *head);//删除功能2
    long int search(struct student *head);//查找功能
    int showdata3(struct student *head);//系统设置
    void print1(struct student *head);//打印功能1
    void print2(struct student *head);//打印功能2
    void print3(struct student *head);//打印功能3
    void out1(struct student *head);//输出到文件功能
    struct student *add(struct student *head);//添加功能
    void cont(struct student *head);//计算功能1
    void change1(struct student*head);//修改功能
    struct student* input1();//外部导入功能
    //void input1(struct student *head);//录入功能
    //void change1(struct student*head, long int i)//修改功能 
    struct student *add(struct student *head);//插入数据
    struct student*nsert(struct student *head);
    //	void destroy1(struct student *head);//摧毁链表
    int TJ(struct student *head);//男生计算功能
    int i;//存放学生编号 
    int iii;//存放选择显示参数
    int j;//存放选择参数 
    int o;//选择颜色参数
    long int ii;//存放需要修改的学生编号
    long int jj;//存放需要查找的学生编号
    char a;
    p=head;
    
    while(1)
    {
    body2();
    printf("
    ");
    printf("
    ");
    printf("
    ---------- 学生成绩管理系统------------
    "); 
    printf("
    ");
    printf(" 1 ======================
    ");
    printf(" = 主菜单 =
    ");
    printf(" ======================
    ");
    printf("
    ");
    printf(" 请根据需要选择操作
    ");
    printf("
    ");
    printf(" 选择查询的方式
    ");
    printf(" (0) 输入0退出该系统
    ");
    printf(" (1)增加一个同学信息 
    ");
    printf(" (2)删除一个同学信息 
    ");
    printf(" (3)修改一个学生信息 
    ");//完成
    printf(" (4)计算学生的三科平均分并且给予等级 
    ");//完成
    printf(" (5)显示所有学生的信息 
    ");//完成
    //printf(" (6) 设置系统背景 
    ");//完成
    printf(" (6) 数据存盘 
    ");//完成
    printf(" (7) 查找一个学生的信息
    ");
    printf(" (8) 统计男生的人数
    ");
    printf(" (9) 局部显示学生的信息
    ");
    printf(" (10) 系统设置
    ");
    //printf(" (11) 选择显示时间
    ");
    //printf(" (12) 删除所有学生的数据
    ");
    //printf(" (13) 数据存盘
     ");
    printf(" 请选择1-10
    ");
    
    scanf("%d",&j);//选择不同的功能
    if(j==0)
    {
    break;
    }
    if(j>=1&&j<=10)
    {
    switch(j)
    {
    case 1:
    add(p);
    _sleep(time);
    system("cls");//清屏操作 
    break;
    case 2: 
    del(p);
    _sleep(time);
    system("cls"); 
    break;
    case 3:
    print3(p);
    change1(p);
    break;
    // change1(p,ii);
    system("cls"); 
    break;
    case 4:
    cont(p);
    //rank(stu);
    _sleep(time);
    system("cls"); 
    break;
    case 5:
    print3(p);
    _sleep(time);	
    break;
    case 6:
    out1(p);
    _sleep(time);
    break;
    /* case 6:
    printf("请选择颜色
    ");
    printf("(1)天蓝色");
    printf("(2)红色");
    printf(" (3) 白色 ");
    printf(" (4) 亮白色 ");
    printf(" (5)绿色 ");
    scanf("%d",&o);
    switch(o)
    {
    case 1:
    system("color 0B");
    break;
    case 2:
    system("color 0C");
    break;
    case 3:
    system("color 07");
    break;
    case 4:
    system("color 0F");
    break;
    case 5:
    system("color 0A");
    break;
    default://其他值均为默认
    system("color 07");
    break;
    }
    break;*/
    case 7:
    printf("请输入要查找的学生学号");
    search(p);
    _sleep(time);
    break;
    case 8:
    TJ(p);//计算男生人数
    _sleep(time);
    break;
    case 9:
    showdata2(p);
    _sleep(time);
    // _sleep(5000); 
    break;
    case 10://系统设置
    showdata3(p);
    _sleep(time);
    break;
    
    /* case 11:
    printf("输入暂停时间(s),默认3s
    ");
    scanf("%d",&time);
    time=time*1000;
    _sleep(time);
    break;
    */
    /*case 12:
    printf("正在摧毁链表
    ");
    dell(p);
    time=time*1000;
    _sleep(time);*/
    /*case 13:
    out1(p);
    _sleep(time);
    */
    
    }
    }
    else
    {
    printf("输入错误
    ");
    _sleep(time);
    system("cls");
    }
    
    
    }
    
    }
    int showdata2(struct student *head)
    {
    
    struct student *p;
    
    int sexJY(char *sex);//性别校验函数
    struct student *del(struct student *head);
    struct student *del2(struct student *head);//删除功能2
    //	long int search(struct student *head,long int i);//查找功能
    void print1(struct student *head);//打印功能1
    void print2(struct student *head);//打印功能2
    void print3(struct student *head);//打印功能3
    void cont(struct student *head);//计算功能1
    void change1(struct student*head);
    struct student *add(struct student *head);//插入数据
    struct student*nsert(struct student *head);
    int TJ(struct student *head);//男生计算功能
    int iii;//存放学生的查询参数
    p=head;
    system("cls");//清屏
    printf(" 1 ======================
    ");
    printf(" = 副菜单 =
    ");
    printf(" ======================
    ");
    printf(" 选择查询的方式
    ");
    printf("
     1.显示所有学生的成绩
    ");
    printf("
     2.显示所有学生的学号性别
    ");
    printf("
     3.显示所有学生的所有信息
    ");
    printf(" 请选择1-3
    ");
    scanf("%d",&iii);
    
    switch (iii)
    {
    case 1:
    print2(p);
    _sleep(1000);
    break;
    case 2:
    print1(p);
    _sleep(1000);
    break;
    case 3:
    print3(p);
    _sleep(1000);
    break;
    default:
    printf("输入错误,返回主菜单
    ");
    break;
    }
    
    return 0;
    
    }//二级菜单 
    int showdata3(struct student *head)//系统设置选项
    {
    struct student *p;
    int iii;
    int o;
    p=head;
    system("cls");//清屏
    printf(" 1 ======================
    ");
    printf(" = 副菜单 =
    ");
    printf(" ======================
    ");
    printf(" 选择查询的方式
    ");
    printf("
     (1). 设置系统背景 
    ");
    printf("
     (2). 修改系统延时 
    ");
    printf("
     (3). 删除链表所有数据并重新读入
    ");
    printf(" 请选择1-2
    ");
    scanf("%d",&iii);
    
    switch (iii)
    {
    case 1:
    printf("请选择颜色
    ");
    printf("(1)天蓝色");
    printf("(2)红色");
    printf(" (3) 白色 ");
    printf(" (4) 亮白色 ");
    printf(" (5)绿色 ");
    scanf("%d",&o);
    switch(o)
    {
    case 1:
    system("color 0B");
    break;
    case 2:
    system("color 0C");
    break;
    case 3:
    system("color 07");
    break;
    case 4:
    system("color 0F");
    break;
    case 5:
    system("color 0A");
    break;
    default://其他值均为默认
    system("color 07");
    break;
    }
    _sleep(1000);
    break;
    case 2:
    printf("输入暂停时间(s),默认3s
    ");
    scanf("%d",&time);
    time=time*1000;
    _sleep(time);
    break;
    case 3:
    printf("正在摧毁链表
    ");
    dell(p);
    time=time*1000;
    _sleep(1000);
    break;
    default:
    printf("输入错误,返回主菜单
    ");
    break;
    }
    
    return 0;
    
    }
    void print1(struct student *head)
    {
    struct student *p;
    p=head;
    if(head==NULL)
    {
    exit(0);
    }
    printf("------------------------------------------------------------------------------------------------------------------
    ");
    do
    {
    printf("
     姓名:%s,学号%d,%s
    
    ",p->name,p->num,p->sex);//姓名,学号
    p=p->next;
    }while(p!=NULL);
    }//不同显示数据的方式 第一种
    void print2(struct student *head)//显示所有学生的成绩
    {
    struct student *p;
    p=head;
    if(head==NULL)
    {
    exit(0);
    }
    printf("------------------------------------------------------------------------------------------------------------------
    ");
    do
    {
    printf("
    
     姓名%s,语文:%3.1f,数学:%3.1f,外语:%3.1f
    ",p->name,p->score[0],p->score[1],p->score[2]);
    p=p->next;
    }while(p!=NULL);
    }//不同显示数据的方式 第二种
    void print3(struct student *head)
    {
    float a;
    struct student *p;
    p=head;
    if(head==NULL)
    {
    exit(0);
    }
    
    printf("------------------------------------------------------------------------------------------------------------------------------------------");
    while(p!=NULL)
    {
    printf("
    
    序号 %d 学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f",p->xuhao,p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2]);//姓名,性别
    a=p->score[0]+p->score[1]+p->score[2];
    printf(" 总分:%3.1f",a);
    printf(" 等级%c
    ",p->DJ);
    p=p->next;
    }
    }
    int passwd(char *name, char *pwd) 
    {
    int u = 0;
    if (strcmp(name, "root") == 0 && strcmp(pwd, "123456") == 0)
    {
    u =1;
    return u;
    }
    else if (strcmp(name, "1") == 0 && strcmp(pwd, "1") == 0)
    {
    u = 1;
    return u;
    }
    return 0;
    }//密码校验函数 传递两个字符数组,一个账号,一个密码。
    void change1(struct student*head)
    {
    long int i;
    struct student *p;
    p=head;//定义指针
    if(head==NULL)
    {
    exit(0);
    }
    printf("输入想要修改的学生的学号:
    ");
    scanf("%ld",&i);
    do
    {	
    //printf("test1");
    if(p->num==i)//当结点跳转到该学生时修改成绩
    {
    
    printf("开始修改信息
    ");
    printf("请先输入学号
    ");
    printf(" ");
    
    scanf("%ld",&p->num);
    if(p->num!=0)
    {
    printf(" 请输入您的姓名
    ");
    printf(" ");
    scanf("%s",&p->name);
    printf(" 你好,%s!",p->name);
    printf("请输入您的性别male or female
    ");
    
    printf(" ");
    scanf("%s",&p->sex); 
    printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩)
    ");
    printf(" 第一科的成绩是:");
    scanf("%f",&p->score[0]); 
    p->score[0]=JY(p->score[0]);//校验第一科的成绩	
    printf(" 第二科的成绩是:");
    scanf("%f",&p->score[1]); 
    p->score[1]=JY(p->score[1]);//校验第二科的成绩
    printf(" 第三科的成绩是:");
    scanf("%f",&p->score[2]);
    p->score[2]=JY(p->score[2]);//校验第三科的成绩
    printf(" 录入完毕
    ");
    printf("-----------------------------------------------------------------------------------------------------------------
    ");
    break; 
    } 
    p=p->next;//需要把下一个结点赋值给p
    
    }
    
    
    } while(p->next!=NULL);
    
     
    
     
    
     
    
    }
    void cont(struct student *head)//计算学生等级函数
    {
    struct student *p;
    int i=0;
    p=head;
    if(head==NULL)
    {
    exit(0);
    }
    printf("------------------------------------------------------------------------------------------------------------------
    ");
    printf("----------------------------------------计算中----------------------------------------
    ");
    do{
    p->averange=((p->score[0])+(p->score[1])+(p->score[2]))/3.0;
    printf("第%d同学的成绩为%3.1f",i+1,p->averange);
    
    if(p->averange>=90&&p->averange<=100)
    { 
    
    printf(" 等级为A
    ",i+1);
    p->DJ='A';
    }
    if(p->averange>=60&&p->averange<=89)
    {
    
    printf(" 等级为B
    ",i+1);
    p->DJ='B';
    }
    if(p->averange>=0&&p->averange<=60)
    {
    
    printf(" 等级为C
    ",i+1);
    p->DJ='C';
    }
    if(p->averange>100||p->averange<0)
    {
    
    printf(" incorrect
    ");
    }
    i=i+1;
    p=p->next;
    
    
    
    }while(p!=NULL);
    
    
    }
    long int search(struct student *head)//通过学号来查找学生的信息
    {
    struct student *p;
    long jj;
    
    scanf("%ld",&jj);
    p=head;
    if(head==NULL)
    {
    exit(0);
    }
    do{
    if(jj==p->num)
    {
    printf("
    
    学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f 等级%c
    ",p->num,p->name,p->sex,p->score[0],p->score[1],p->score[2],p->DJ);
    return 0;
    }
    
    
    p=p->next;
    }while(p->next!=NULL);
    //遍历链表结点
    
    printf("无该生信息
    ");
    return 0;
    
     
    
    
    }
    struct student *del(struct student *head)//链表怎么删除结点并链接 删除序号为多少的学生的成绩 定义一个结构体指针
    {
    int i,j;
    struct student *p1,*p2;//定义两个结构体指针
    if(head==NULL)
    {
    exit(0);
    }
    p1=head;//
    
    p2=head;//p2指针依然指向head
    printf("删除第几个节点的数据
    ");
    scanf("%d",&i);//获得节点数据
    for(j=1;j<i;j++)
    {
    p2=p1;//p2指向p1
    p1=p1->next;//p1向后移动一个表
    }
    //此时指向删除数据的上一个位置
    if(p1==head)//如果此时依然指向链表的头 则链表向后移动一位
    {
    
    // head=p1->next;//则通过p1向后一移动一位,链表向后移动了一位但是指针没动
    head = p1->next;//逻辑完全正确啊
    // free(p1);
    printf("当前正在删除一个结点数据
    ");
    
    //return head;
    }
    else//否则
    {
    p2->next=p1->next;//把p1指针指向下一个数据给p2指针指向下一个位置 这句话的意思是向后移动一位指针。
    //把p1指针指向下一个数据给p2指针指向下一个位置 这句话的意思是向后移动一位指针。
    
    }
    
    while(head!=NULL)
    {
    printf("
    
    序号 %d 学号 %ld 姓名:%s 性别: %s 语文: %3.1f 数学:%3.1f 外语:%3.1f",head->xuhao,head->num,head->name,head->sex,head->score[0],head->score[1],head->score[2]);//姓名,性别
    //	a=p->score[0]+p->score[1]+p->score[2];
    //printf(" 总分:%3.1f",a);
    printf(" 等级%c
    ",head->DJ);
    head=head->next;
    } //删除第二行数据,之后的链条直接中断需要把链条接上
    free(p1);//释放
    n=n-1;
    printf("
    **********删除中 稍后*********
    ");
    
     
    
    return head;//返回
    
    
    }
    struct student*nsert(struct student *head)
    {
    struct student *p1,*p,*q;
    int i = 1;
    int jj;
    int mm;
    int nn;
    if(head==NULL)
    {
    exit(0);
    }
    
    printf("要插入的位置(尾插)1-%d:",n);
    scanf("%d",&jj);//所要插入第几位学生信息
    if(jj>=1&&jj<=n)
    {
    
    
    p = head->next ;
    p1 = (struct student *)malloc(sizeof(struct student));
    printf("请先输入学号(输入0退出录入)
    ");
    printf(" ");
    scanf("%ld",&p1->num);
    if(p1->num!=0)
    {
    p1->xuhao=jj+1;
    printf(" 请输入您的姓名
    ");
    printf(" ");
    scanf("%s",&p1->name);
    printf(" 你好,%s!",p1->name);
    printf("请输入您的性别male or female
    ");
    
    printf(" ");
    scanf("%s",&p1->sex); 
    mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型
    if(mm==1)
    {
    printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩)
    ");
    printf(" 第一科的成绩是:");
    scanf("%f",&p1->score[0]); 
    p1->score[0]=JY(p1->score[0]);//校验第一科的成绩	
    printf(" 第二科的成绩是:");
    scanf("%f",&p1->score[1]); 
    p1->score[1]=JY(p1->score[1]);//校验第二科的成绩
    printf(" 第三科的成绩是:");
    scanf("%f",&p1->score[2]);
    p1->score[2]=JY(p1->score[2]);//校验第三科的成绩
    printf(" 录入完毕
    ");
    n=n+1;//系统学生数自增1
    printf("-----------------------------------------------------------------------------------------------------------------
    ");
    }
    }
    
    if(1 == jj)
    {
    struct student*q = head->next ;
    head->next = p1;
    p1 ->next = q; 
    }
    else
    while( p )
    {
    if(i == (jj-1))
    {
    struct student*q = p->next ;
    p->next = p1;
    p1->next = q;
    }
    p = p->next ;
    i++;
    }
    
    return p;
    
    }
    else
    {
    printf("
    ---------录入错误---------
    ");
    printf("请重试
    ");
    return head;
    }
    }
    int sexJY2(char *sex) 
    {
    int u = 0;
    if (strcmp(sex, "male") == 0)
    {
    u =1;
    return u;
    }
    return 0;
    }
    int sexJY(char *sex) 
    {
    int u = 0;
    while(1)
    {
    if (strcmp(sex, "male") == 0 || strcmp(sex, "female") == 0)
    {
    u =1;
    return u;
    }
    else
    {
    printf("性别错误请重新输入
    ");
    scanf("%s",sex);
    
    }
    }
    }
    int TJ(struct student *head)
    {
    int sexJY2(char *sex);
    int mm;
    int nn;
    struct student *p;
    if(head==NULL)
    {
    exit(0);
    }
    p=head;
    do
    { 
    nn=sexJY((char*)p->sex);//强制转换
    
    if(nn==1)
    {
    man++;
    }
    
    p=p->next;//一直向下指直到
    
    
    
    }while(p!=NULL);
    
    printf("
    男生人数为:%d
    ",man);
    return 0;
    }//遍历整个链表 计算男生的人数
    int in()
    {
    
    int i,j;
    int m;
    int n=0;//如果密码输入错误三次则跳出循环
    char user[20]={'0'};
    char pas[20]={'0'};
    char aa[20]={' ','U','s','e','r',' ','N','a','m','e',':'};//输出账号登陆
    char bb[20]={' ','P','a','s','s','w','o','r','d',':'};
    system("mode con cols=45 lines=15");
    while(1)
    {
    printf("
    ");
    for(i=0;i<12;i++)
    {
    printf("%c",aa[i]);
    _sleep(50);
    
    }
    //printf(" User Name:");
    gets(user);//输入账号
    for(i=0;i<10;i++)
    {
    printf("%c",bb[i]);
    _sleep(50);
    
    }
    gets(pas);//如何隐藏输入的密码 安全性getch(); printf("*");
    m=passwd(user,pas);
    if(m==1)
    {
    return m;
    }
    else
    {
    n++; 
    printf("incorrect please try again
    ");
    if(n==3)
    {
    system("color 04");
    system("cls");
    while(1)
    {
    printf("快滚出老子的魔仙堡!!!!
    ");
    _sleep(1000);
    }
    return 0;
    }
    }
    }
    }
    struct student *add(struct student *head)
    {
    struct student *p,*p1,*p2;
    int i = 1;
    int jj;
    int mm;
    int nn;
    p=head;
    printf("输入要插入的位置1-%d: ",n);
    scanf("%d",&i);
    jj=i;
    
    p1=(struct student*)malloc(LG);//开辟p1内存空间
    p2=(struct student*)malloc(LG);//开辟p2内存空间
    printf("请先输入学号(输入0退出录入)
    ");
    printf(" ");
    scanf("%ld",&p1->num);
    if(p1->num!=0)
    {
    p1->xuhao=jj+1;
    printf(" 请输入您的姓名
    ");
    printf(" ");
    scanf("%s",&p1->name);
    printf(" 你好,%s!",p1->name);
    printf("请输入您的性别male or female
    ");
    
    printf(" ");
    scanf("%s",&p1->sex); 
    mm=sexJY((char*)p1->sex);//char **类型与char *类型不兼容 需要强制转换为char*类型
    if(mm==1)
    {
    printf(" 请输入三科成绩,(语文成绩,数学成绩,外语成绩)
    ");
    printf(" 第一科的成绩是:");
    scanf("%f",&p1->score[0]); 
    p1->score[0]=JY(p1->score[0]);//校验第一科的成绩	
    printf(" 第二科的成绩是:");
    scanf("%f",&p1->score[1]); 
    p1->score[1]=JY(p1->score[1]);//校验第二科的成绩
    printf(" 第三科的成绩是:");
    scanf("%f",&p1->score[2]);
    p1->score[2]=JY(p1->score[2]);//校验第三科的成绩
    printf(" 录入完毕
    ");
    printf("-----------------------------------------------------------------------------------------------------------------
    ");
    }
    }
    if(i==1)//如果插入点为头部head 则
    {
    p2=head->next;
    head->next=p1;
    p1->next=p2;
    n=n+1;//系统学生数自增1
    return head;
    }
    else
    {
    p=head;
    if(i==n)
    {
    //如果输入等于n
    while(p->next!=NULL)
    {
    p=p->next;
    }
    p->next=p1;
    p1->next=NULL;
    //插入函数写完后一定要把指针指向空
    //printf("%d",p1->xuhao);
    n=n+1;
    return head;
    
    }
    else
    {
    //如果不是头也不是尾巴
    //则从中间插
    while(i--)
    {
    p=p->next;
    
    }
    //	printf("已找到");
    p2=p->next;
    p->next=p1;
    p1->next=p2;
    n=n+1;
    return head;
    
    }
    }
    }
    void *dell(struct student *head)
    {
    struct student *p=head;
    free(p);
    printf("
    
    链表已摧毁
    
    ");
    
    
    }
    int choose(int i)
    {
    printf("
     ----------------------------------------------- 学生成绩管理系统-----------------------------------------------
    "); 
    printf("
    ");
    printf("
    ");
    printf(" 请选择信息录入的方式
    ");
    printf(" ===========================
    ");
    printf(" = (1)手动输入 =
    ");
    printf(" = (2)通过外部导入信息 =
    ");
    printf(" ===========================
    ");
    printf(" 请选择:");
    while(1)
    {
    scanf("%d",&i);
    if(i==1||i==2)
    {
    //printf("%d",n);
    return i;
    }
    else
    {
    printf("
     请输入一个有效的值:");
    }
    
    }
    
    
    }
    void load()
    {
    printf("
    该功能还在完善中
     敬请期待
    ");
    
    }
    //实现输出输入文件的功能
    void out1(struct student *head)
    {
    FILE *out;
    struct student *p;
    char outfile[20];
    char ch;
    int i;
    ch=getchar();
    if((out=fopen("stu.txt","wb"))==NULL)
    {
    printf(" 找不到输出文件");
    exit(0);
    }
    p=head;
    while(p!=NULL)
    {
    if(fwrite(p,LG,1,out)!=1) 
    { 
    printf("
    写入数据出错
    "); 
    fclose(out); 
    return; 
    } 
    p=p->next;
    } 
    fclose(out); 
    } 
    struct student *input1 () 
    { 
    struct student *head = NULL; 
    struct student *p1, *p2;//s = p1;p = p2; 
    
    FILE *fp; 
    if((fp=fopen("stu.txt","rb+"))==NULL) 
    { 
    printf("打开文件出错
    "); 
    exit(0); 
    } 
    while(!feof(fp)) { 
    if((p1=(struct student*)malloc(LG))==NULL){ 
    printf("内存申请出错
    "); 
    fclose(fp); 
    exit(0); 
    } 
    if(fread(p1,LG,1,fp)!=1){ 
    free(p1); 
    break; 
    } 
    if(head==NULL) 
    {
    head=p2=p1;
    n=n+1;
    } 
    else{ 
    p2->next=p1; 
    p2=p1;
    n=n+1;
    } 
    } 
    fclose(fp); 
    return (head); 
    }
    

      

      登陆界面

    实现文件的读入功能

    主菜单的设计  还有相关的二级菜单

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<conio.h>
    #include<windows.h>
    #include"xyf.h"
    int main(void)
    {
        struct student *p;
        int m=1;//注意要修改回来
    	int zz=0;
        //system("cls"); 
        //m=in();
       if(m==1)
       {
    	system("color 07");
    	zz=choose(zz);
    	switch (zz)
    	{
    case 1:
    	body();
        //data(p);
    	p=creat();
    	showdata(p);
    	break;
    case 2:
    	printf("
       -----------------------------------------------正在导入-----------------------------------------------
    "); 
    	p=input1();
    	showdata(p);
    	break;
    	}
        }
       
         _sleep(1000);
         return 0;
    
    } 
    /*增加一个同学信息
    删除一个同学信息
    修改一个学生信息
    查找一个学生信息(按姓名、按学号)
    等级计算
    统计男生人数
    显示学生信息(局部或全部)
    学生成绩管理系统
    要求:
    
    定义学生结构体数据类型。在此类型中,应该包括三个成员变量(学号、姓名、成绩)。
    
    定义个学生数组保存学生的信息。用一个变量来记录学生人数。
    	添加学生的信息。
    	显示学生的信息。
    	删除学生的信息。
    	查找学生的信息,根据姓名。
    	统计学生的信息。
    
    
    第一步:菜单界面设计
    提示:
    1、程序功能的展示:输出语句
    
    2、提供用户选择功能的接口:输入语句
    
    3、对用户输入的范围校验:if结构
    
    4、对用户选择的响应:switch结构
    
    5、单个函数头的定义
    
    
    第二步:
    1、结构体构造(函数外面的地方)
    2、设计输入函数,实现一个信息的输入;
    3、设计输出函数,实现一个信息的输出。
    
    4、提示:变量的定义位置,解决数据共享问题。
    方法一:定义在主函数中,通过函数参数传递的方式进行。
    
    方法二:定义为全局变量,实现数据的共享(变量的作用域)
    
    
    程序结构:
    //引入头文件
    include
    
    //函数原型声明
    void add();
    
    //结构体定义(构造)
    struct A{……};
    
    //主函数定义
    int main()
    {
    
    }
    
    //子函数定义
    void add()
    {……}
    
    
    第三步:采用数组解决全班信息的存储、显示问题
    
    1、采用宏定义的方式声明学生人数
    2、定义数组,定义数组的数组下标采用宏定义符号
    struct stu s[N];
    for(int i=0;i<N;i++) 
    {
        //单个数据输入代码        
    }
    
    3、对数组操作,显示全班信息
    
    第四步:结构体变量定义在主函数中,通过函数参数传递的方式进行数据共享。
    1、一个数据的处理
    main()
    {
       ……
       struct stu s;  //结构体变量的定义
       sr(&s);         //实参传递
       …… 
    }
    
    //单个数据输入函数
    void sr(struct stu * x)
    {  
       //对形参变量x赋值 
       scanf("%d",&(*x).xh);
       scanf("%d",&(x->xh));
    }
    
    2、多个数据的处理
    main()
    {
       ……
       struct stu s[10];  //结构体变量的定义
       for(i=0;i<10;i++)
          sr(&s[i]);         //实参传递
       …… 
    }
    
    //单个数据输入函数
    void sr(struct stu * x)
    {  
       //对形参变量x赋值 
       scanf("%d",&(*x).xh);
       scanf("%d",&(x->xh));
    }
    */
    /*
    /*1、声明一个结构体类型student,包含姓名、性别、年龄、语文成绩、数学成绩、外语成绩等成员。
    2、编写程序:输入2个同学的基础信息,分别求出2个同学的语文平均成绩。
    3、编写程序:输入10个同学的基础信息,显示同学的基础信息。
    4、设计多个显示功能函数:
    (1)显示学生的姓名、性别
    (2)显示学生的姓名、年龄
    (3)显示学生的姓名、总分
    编写程序:让用户有选择的查看10位同学的信息。
    5、给结构体类型student新增成员:等级
    设计等级测试函数:根据3科平均分计算出学生等级(A:100-90;  B:89-60;   C:60-0)
    编写程序:让用户有选择的使用系统功能。
    6、学生管理系统
    7.链表+指针
    学生成绩管理系统
                   2016级物联网2班
    1.代码优化
    3.框架
    4.增加功能
    5.输出定向文件
    */
    

      

  • 相关阅读:
    日本最大的汽车品牌:丰田【仅供自己参考】
    读书笔记1
    读书笔记1
    计算机网络笔记1
    ZY凉凉经
    HK凉凉经
    访问一个网站,发生了什么?
    正向代理VS反向代理
    mac下打开hosts文件
    国际手机区号
  • 原文地址:https://www.cnblogs.com/a986771570/p/7051129.html
Copyright © 2020-2023  润新知