学生信息管理系统控制台的实现

来源:互联网 发布:icloud删除的数据恢复 编辑:程序博客网 时间:2024/06/06 19:01
// Stu_sys.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<string.h>//信息结构体struct SSinfo{int nNum;//学号char sName[20];//姓名char sSex[8];//性别char sTele[20];//电话号码double dMath;double dChin;double dEngl;double dAver;//个人平均分double dSum;//个人总分分}g_stu[100]={0};//全局结构体变量并清零#define COUNT sizeof(g_stu)/sizeof(g_stu[0])//容量/*====================        原单一功能的显示函数====================*/void Print()//原单一功能的显示函数{//子菜单,按各个科目排序system("cls");//每次浏览都先清屏puts("学号\t姓名\t数学\n");int i = 0;while (g_stu[i].nNum && i<COUNT){if (g_stu[i].nNum != -1)//检查是否已经删除{printf("%d\t%s\t%0.1f\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);}++i;}getch();//暂停,任意键继续}/*================          按学号排序================*/void Sortbynumber(){int i =0, j = 0;int nCount = 0;//1.先找到尾,每次少循环一次//2.或者每次都找到尾结束//冒泡排序while (g_stu[nCount].nNum && (nCount<COUNT)){++nCount;}for (i=0; i<nCount; ++i){for (j=0; j<nCount-i-1; ++j){if (g_stu[j].nNum > g_stu[j+1].nNum){struct SSinfo t = g_stu[j];g_stu[j] = g_stu[j+1];g_stu[j+1] = t;}}}Print();//排序玩打印}/*================          按姓名排序================*/void Sortbyname(){int i =0, j = 0;int nCount = 0;//1.先找到尾,每次少循环一次//2.或者每次都找到尾结束//冒泡排序while (g_stu[nCount].nNum && (nCount<COUNT)){++nCount;}for (i=0; i<nCount; ++i){for (j=0; j<nCount-i-1; ++j){if (strcmp(g_stu[j].sName , g_stu[j+1].sName))//排序条件,姓名{struct SSinfo t = g_stu[j];g_stu[j] = g_stu[j+1];g_stu[j+1] = t;}}}Print();//排序玩打印}/*================         按数学成绩排序================*/void Sortbymath()//按数学成绩排序{int i =0, j = 0;int nCount = 0;//1.先找到尾,每次少循环一次//2.或者每次都找到尾结束//冒泡排序while (g_stu[nCount].nNum && (nCount<COUNT)){++nCount;}for (i=0; i<nCount; ++i){for (j=0; j<nCount-i-1; ++j){if (g_stu[j].dMath > g_stu[j+1].dMath)//排序条件,数学成绩{struct SSinfo t = g_stu[j];g_stu[j] = g_stu[j+1];g_stu[j+1] = t;}}}Print();//排序玩打印}/*================         浏览的子菜单================*/int Browse(){system("cls");puts("\n\n\n\n\n\n\t\t\t\t 1.按学号排序");puts("\t\t\t\t 2.按姓名排序");puts("\t\t\t\t 3.按数学成绩排序");puts("\t\t\t\t 0.返回主菜单");int i = 0;scanf("%d",&i);switch (i){case 1:Sortbynumber();break;case 2:Sortbynumber();break;case 3:Sortbymath();break;}return i;}/*================        检查录入是否重复================*/void isRepeat(int n){int nNumb;printf("请输入学号:");scanf("%d",&nNumb);int i = 0;while (g_stu[i].nNum>0 && i<COUNT)//考虑-1的删除位,如果是-1不执行循环{if (g_stu[i].nNum == nNumb){puts("该学号已存在,请重新输入!");scanf("%d",&nNumb);i = 0;//每次检查都从零开始continue;}++i;}g_stu[i].nNum = nNumb;}/*===========         录入信息===========*/void Input(){char c;do{int i = 0;while (g_stu[i].nNum && i<COUNT){++i;}if (i >= COUNT){puts("数据已满!");return;}isRepeat(i);printf("姓名、数学成绩:【空格间隔】");scanf("%s%lf",g_stu[i].sName,&(g_stu[i].dMath));Print();//是否继续录入之前都显示一下printf("是否继续录入数据:[y/s]");c = getch();putch(c);putch('\n');}while(c == 'Y' || c=='y' || c=='\r');//选择是否继续录入}/*===========        按学号查着===========*/void FindbyNum(){int nNum = 0;printf("请输入学号:");scanf("%d",&nNum);int i = 0;system("cls");while (g_stu[i].nNum && i<COUNT){if (g_stu[i].nNum == nNum){puts("学号\t姓名\t数学\n");printf("%d\t%s\t%0.1f\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);break;//找到就退出}++i;}//找不到if (g_stu[i].nNum==0 || i>=COUNT){puts("没有该学号!");}system("pause");return;}/*===========        按姓名查找===========*/void FindbyName(){int nNum = 0;char sName[20];//姓名printf("请输入姓名:");scanf("%s",sName);int i = 0;bool bFlag = 0;//没找到system("cls");while (g_stu[i].nNum && i<COUNT){if (strcmp(g_stu[i].sName , sName) == 0){system("cls");puts("学号\t姓名\t数学\n");printf("%d\t%s\t%0.1f\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);bFlag = 1;}++i;}if (!bFlag){puts("目录中无此姓名!");}system("pause");return;}/*=================        通过数学成绩查找=================*/void FindbyMath()//按数学成绩查着{int nNum = 0;double dMath;printf("请输入数学成绩:");scanf("%lf",&dMath);int i = 0;system("cls");while (g_stu[i].nNum && i<COUNT){if (g_stu[i].dMath == dMath){system("cls");puts("学号\t姓名\t数学\n");printf("%d\t%s\t%0.1f\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);break;//找到就退出}++i;}//找不到if (g_stu[i].nNum==0 || i>=COUNT){puts("无此项数据!");}system("pause");return;}/*===========        查找子菜单===========*/int  Find(){system("cls");//每次打印菜单都清屏puts("\n\n\n\n\n\n\t\t\t\t1.按学号查找");puts("\t\t\t\t2.按姓名查找");puts("\t\t\t\t3.按数学成绩查找");puts("\t\t\t\t0.返回主菜单");int i = 0;scanf("%d",&i);switch(i){case 1:FindbyNum();break;case 2:FindbyName();break;case 3:FindbyMath();break;}return i;}/*===========         删除数据===========*/void Delete(){Print();//删除之前打印一下printf("请输入要删除的学号:");int nNumb = 0;scanf("%d",&nNumb);int i = 0;while (g_stu[i].nNum && i<COUNT){if (g_stu[i].nNum == nNumb){printf("你确认要删除%d\t%s\t%0.1f的数据吗?[y/n]\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);char c;c = getch();if (c=='Y'  || c=='y' || c=='\r'){g_stu[i].nNum = -1;//作为删除的标记,在浏览的时候不显示Print();//删除之后显示一下return;}}++i;}puts("不存在此学号!");getchar();}/*===========================         功能:修改数据 返回:0修改成功、1不成功===========================*/int Modify(){Print();//修改之前打印一下printf("请输入要修改的学号:");int nNumb = 0;scanf("%d",&nNumb);int i = 0;while (g_stu[i].nNum && i<COUNT){if (g_stu[i].nNum == nNumb){printf("你确认要修改%d\t%s\t%0.1f的数据吗?[y/n]\n",g_stu[i].nNum, g_stu[i].sName, g_stu[i].dMath);char c;c = getch();if (c=='Y'  || c=='y' || c=='\r'){printf("姓名、数学成绩:【空格间隔】");scanf("%s%lf",g_stu[i].sName,&(g_stu[i].dMath));Print();//修改之后显示一下}return 0;//修改结束}++i;}puts("学号不存在!");getch();//暂停,防止一闪而过return 1;//修改不成功}/*===========     总菜单===========*/int Menu(){system("cls");//每次显示菜单都先清屏puts("\n\n\n\n\n\n\t\t\t\t1.浏览所有信息");puts("\t\t\t\t2.录入学生信息");puts("\t\t\t\t3.查找学生信息");puts("\t\t\t\t4.删除学生信息");puts("\t\t\t\t5.修改学生信息");puts("\t\t\t\t0.退出");int i = 0;scanf("%d",&i);switch (i){case 1:while(Browse());break;case 2:Input();break;case 3:while(Find());break;case 4:Delete();break;case 5:while(Modify());break;}return i;}/*===========         保存数据===========*/void Save(){int i = 0;//循环每次写入一个结构体FILE* pf = fopen("./stu.data","w");while (g_stu[i].nNum && i<COUNT){if (g_stu[i].nNum > 0){fwrite(&g_stu[i],sizeof(g_stu[i]),1,pf);}++i;}fclose(pf);}/*===========加载数据===========*/void Load(){int i = 0;FILE* pf = fopen("./stu.data","rb");if(!pf)return;//文件不存在while(fread(&g_stu[i],1,sizeof(g_stu[i]),pf))//每次读一个字节,一次读sizeof()这么长{++i;}fclose(pf);}int main(int argc, char* argv[]){Load();//加载数据system("color 74");while (Menu());Save();//保存数据到硬盘return 0;}

1 0
原创粉丝点击