开发创新作业-对学生信息管理系统进行增量开发

本次增量开发代码来源于网上,代码主要实现了学生信息管理系统,以下为该代码的主要功能:

(1)学生信息录入:输入数字表明添加几位学生的信息,可以对学生的学号、姓名、性别、语数英等成绩进行添加。

(2)学生单个信息查询:通过输入学生的学号,可以显示出学生的相关信息,包含学号、姓名、性别、语数英等成绩。

(3)查询全部学生成绩:使用该功能可以查询到所有已录入的学生的相关信息。

(4)修改学生信息:通过学生的学号,可以对学生的相关信息进行修改。

(5)删除学生信息:通过学生学号可以将学生的所有信息进行删除。

 

以上为该代码原始功能的展现,通过对该代码的研究以及使用过程中,准备从学生信息的修改以及学生信息保存两个方面进行增量开发:

1.在修改学生信息时,原代码对学生的所有信息都一一弹出进行更改,在需要更改单个信息时会比较麻烦,所以个人增加了一个页面以便于对信息可以做到单个更改:

    1.1 点击修改学生信息功能后,界面会跳转到如下界面供用户选择,使其对错误信息能够做到单个更改;

 

 1.2 根据文字提示,选择想要更改的信息(如更改学号);

 

1.3 更改完成后显示学生信息会发现更改成功。

 

以下为增加的代码:

void choosetwo() //增加页面进行信息修改 
{  
    system("cls");
    struct Student *RS;
    int choice;
    for(RS=head;RS!=NULL;RS=RS->next)
    {
        printf("1.修改学号\n");
        printf("2.修改姓名 \n");
        printf("3.修改性别 \n");
        printf("4.修改语文成绩\n");
        printf("5.修改数学成绩\n");
        printf("6.修改英语成绩\n");
        printf("7.无修改退出菜单\n");
        printf("请输入要修改的信息:");
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            printf("请输入学号:");
            scanf("%s", RS->number);
            break;
        case 2:
            printf("请输入姓名:");
            scanf("%s",RS->name);
            break;
        case 3:
            printf("请输入性别:");
            scanf("%s", RS->sex);
            break; 
        case 4:
            printf("请输入语文成绩:");
            scanf("%d", RS->Chinese);
            break;
        case 5:
            printf("请输入数学成绩:");
            scanf("%d", RS->Math);
            break;
        case 6:
            printf("请输入英语成绩:");
            scanf("%d", RS->English);
            break;
        case 7:break;
        }
    } 
}

 

 2.在总体观察学生信息时不够明显简便,所以对系统增加了一个文件功能,用来保存已录入的学生信息。

   2.1 根据页面提示保存信息后会在代码文件夹路径下生成一个student.txt的文本文档。

 

 

  2.2 文本文档中包含的数据

 

 

以下为文件功能代码:

void save()    //保存学生信息
{
   FILE *fp;
   struct Student *SA;
   fp=fopen("student.txt","w");
   if(!fp)
   {
       printf("打开失败");
       exit(0);
    }
    for(SA=head;SA!=NULL;SA=SA->next)
    {   fprintf(fp,"学号 姓名 性别 语文成绩 数学成绩 英语成绩\n"); 
        fprintf(fp,"%s  %s   %s   %d   %d   %d\n",SA->number,SA->name,SA->sex,SA->Chinese,SA->Math,SA->English);
    }
    fclose(fp);
    printf("保存成功"); 
    
}

改后源代码:

#include <stdio.h>
#include <windows.h>//可实现运行框颜色及大小改变
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{
    char number[20];        //学号 
    char name[10];        //姓名 
    char sex[4];            //性别 
    int Chinese;            //语文成绩 
    int Math;                //数学成绩 
    int English;            //英语成绩 
    struct Student* next;    //指向下一个数据的指针 
};
struct Student* head = NULL;//全局 
struct Student* end = NULL;//全局 
 void Menu()//定义一个Menu 函数 
 {
     
    printf("1、学生信息录入\n");
    printf("2、学生单个成绩查询\n");
    printf("3、查询全部学生成绩\n");
    printf("4、修改学生信息\n");
    printf("5、删除学生信息\n");
    printf("6、保存学生信息\n");
    printf("7、退出系统\n");
 
    
} 
 
void Add()//添加函数 
{   int count;
    system("cls");//清屏 
    printf("请输入要录入信息的个数:");
    scanf("%d",&count);
    struct Student *s1,*s2,*temp; 
    s1=s2=(struct Student*)malloc(sizeof(Student));//s1,s2开辟空间 
    if(head==NULL)//如果头等于空,说明就是第一个 
    {
        head = s1;//让s1当头 
    }
    else
    {
        end->next = s1 ;//
    }
    int i = 1;    
    while(count>0)//循环输入 
    {
        printf("请输入第%d位学生信息:\n",i++);
        printf("学号:\n");
        scanf("%s",&s1->number);
        printf("姓名:\n");
        scanf("%s",&s1->name);
        printf("性别:\n");
        scanf("%s",&s1->sex);
        printf("语文成绩:\n");
        scanf("%d",&s1->Chinese);
        printf("数学成绩:\n");
        scanf("%d",&s1->Math);
        printf("英语成绩:\n");
        scanf("%d",&s1->English);
        count--;
        s2->next=s1;//把s1 中数据给s2 ;然后s1继续开辟空间 让数据存到s1中 
        s2=s1;
        s1=(struct Student*)malloc(sizeof(Student));
        printf("添加成功!\n");
        system("pause");//暂停
        system("cls");
    }
    s2->next= NULL;
    end = s2;
    printf("全部添加成功!\n");
    system("pause");
}
void View()//查找函数 
{
    system("cls");
    struct Student *VS;
    printf("输入要查询信息的学生学号:\n");
    char num[10];
    int view=1;
    scanf("%s",&num);
    for(VS=head;VS!=NULL;VS=VS->next)
    {
        if(strcmp(VS->number,num)==0)//两个结构体比较;如果相等就说明找到了; 
        {
            printf("成功找到!\n");
            printf("学号:%s\t姓名:%s\t性别:%s\n",VS->number,VS->name,VS->sex);
            printf("语文:%d\t数学:%d\t英语:%d",VS->Chinese,VS->Math,VS->English);
            view=0;
            break;
        }
        //不相等就接着往下找 
    }
    if(view==1)
    {
        printf("不好意思,未找到!\n");
    }
    system("pause");//等待 进行下一次选择 
}
 
 
void ViewAll()//定义一个展示全部学生成绩的函数 
    {
        system("cls");
            struct Student *VA;
        if(head!=NULL)//头部bu等于空 说明里面存有数据 
    {
        printf("所有学生成绩如下:\n");
        for(VA=head;VA!=NULL;VA=VA->next )
        {
            printf("学号:%s\t姓名:%s\t性别:%s\n",VA->number,VA->name,VA->sex);
            printf("语文:%d\t数学:%d\t英语:%d\n",VA->Chinese,VA->Math,VA->English);
            
        }
    }
    else
    {
        printf("该系统中还未录入信息");
    }    
    system("pause");
}

void Delete() //删除信息 
{
    system("cls");
    int flag =1;
    while(flag)
    {
        printf("请输入要删除的学生学号:");
        char num[10];
        scanf("%s",&num);
        struct Student * DS,*temp;            //定义结构体指针 
        for(DS=head;DS!=NULL;)
        {
            if(strcmp(DS->number,num)==0)
            {
                if(DS==head)            //如果DS是第一个节点 
                {
                    head = DS->next;            //DS的下一个是NULL当头 ,删除完毕 
                    flag = 0;
                    printf("删除成功!\n");
                    system("pause");
                }
                else
                {
                    flag = 0;
                    printf("删除成功!\n");
                    temp->next= DS->next;
                    free(DS);            //把DS这个空间释放 
                    system("pause");
                }
                
            }
            temp = DS;
            DS=DS->next;
        }
        if(flag==1)
        {
            printf("未找到该学生学号!\n");
            
            system("pause");
            break;
        }
    }
}
    
 
    void choosetwo() //增加页面进行信息修改 
{  
    system("cls");
    struct Student *RS;
    int choice;
    for(RS=head;RS!=NULL;RS=RS->next)
    {
        printf("1.修改学号\n");
        printf("2.修改姓名 \n");
        printf("3.修改性别 \n");
        printf("4.修改语文成绩\n");
        printf("5.修改数学成绩\n");
        printf("6.修改英语成绩\n");
        printf("7.无修改退出菜单\n");
        printf("请输入要修改的信息:");
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            printf("请输入学号:");
            scanf("%s", RS->number);
            break;
        case 2:
            printf("请输入姓名:");
            scanf("%s",RS->name);
            break;
        case 3:
            printf("请输入性别:");
            scanf("%s", RS->sex);
            break; 
        case 4:
            printf("请输入语文成绩:");
            scanf("%d", RS->Chinese);
            break;
        case 5:
            printf("请输入数学成绩:");
            scanf("%d", RS->Math);
            break;
        case 6:
            printf("请输入英语成绩:");
            scanf("%d", RS->English);
            break;
        case 7:break;
        }
    } 
}


void save()    //保存学生信息
{
   FILE *fp;
   struct Student *SA;
   fp=fopen("student.txt","w");
   if(!fp)
   {
       printf("打开失败");
       exit(0);
    }
    fprintf(fp,"学号 姓名 性别 语文成绩 数学成绩 英语成绩\n"); 
    for(SA=head;SA!=NULL;SA=SA->next)
    {   
        fprintf(fp,"%s  %s   %s   %d   %d   %d\n",SA->number,SA->name,SA->sex,SA->Chinese,SA->Math,SA->English);
    }
    fclose(fp);
    printf("保存成功"); 
    
}

int main()                
{ 
    system("color 72");//运行框颜色改变
    system(" mode con cols=66 lines=33");//运行框大小改变
    int choice;
    printf("请选择要使用的功能:\n"); 
    
    while(1)            //循环 
{
    Menu();                //每次循环都会调用 这个函数让主屏幕上显示 
    scanf("%d",&choice);
 
        switch (choice)
     {
    case 1:
        Add();
        break;
    case 2:
        View();
        break;
    case 3:
        ViewAll();
        break;
    case 4:
        choosetwo();
        break;
    case 5:
        Delete();
        break;
    case 6:
        save();            
        break;
    case 7:
        exit(0);
        break;
    
    default:
            printf("输入有误,请重新选择:");
     }
    system("cls");//每次查找结束 会清空屏幕信息 
     }
}

 

posted @ 2023-03-07 18:32  小羊是我  阅读(46)  评论(0)    收藏  举报