开发创新作业-对学生信息管理系统进行增量开发
本次增量开发代码来源于网上,代码主要实现了学生信息管理系统,以下为该代码的主要功能:
(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");//每次查找结束 会清空屏幕信息 } }
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号