学生成绩管理系统【c】

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAX 2000
struct Student
{
int no;       /*学号*/
char name[8]; /*姓名*/
char sex;      /*性别*/
char phone[8];/*联系电话*/
int mark[4];   /*语文、数学、外语、考试平均成绩*/    
};
int total;         /*总人数*/
char password[20];/*密码*/
struct Student student[MAX];
/**************************************************************************/
void Init(); /*初始化,文件不存在,则建立,同时记录下文件中的记录数   */
int get_menu_choice() ;/*接受菜单选择 */
void menu() ;/*菜单响应 */
void Show_menu(); /*显示菜单 */
FILE *file_operate(char *mode); /*文件操作 */
void Delete(FILE *fp); /*删除记录 */
void Alter(FILE *fp); /*修改记录信息  */
void Show(); /*显示打印所有的信息 */
void Save(); /*备份信息到文件  */
void Find(); /*查找记录的函数  */
void Input(FILE *fp); /*向管理系统中增加记录  */
int Inputoneperson(int i); /*向数组增加一条记录  */
void set_psw();  /*设置密码  */
int psw_check(); /*密码验证  */
/*下面函数为了简化部分工作从上面函数中划分出来的功能  */
/**************************************************************************/
void exchange(int i,int j);/*交换两个人的所有信息  */
void PrintTitle(); /*打印头信息  */
void clear(); /*清屏 */
void Showoneperson(int i); /*显示打印一个人的信息 */
int CheckNumber(int no_temp); /*检查学号是否存在,存在返回序号,不存在返回-1 */
void Inputfile(int i,FILE *fp); /*把下标为i 的记录写入文件 */
void Readfile(int i,FILE *fp); /*读一条记录从文件 */
int Sort_menu_choice();/*选择是按学号还是成绩排序*/
void Sort_menu();/*排序菜单*/
void Sort_save();/*排序后数据写入文件*/
void Sort_no();/*选择是按学号排序*/
void Sort_mark();/*选择是按成绩排序*/
int get_menu_choice()/*接受菜单选择 */
{
int menu_ch;             /*菜单选项 */
do
{
printf("Select the choice:");
scanf("%d",&menu_ch);
if((menu_ch<0)||(menu_ch>9))
printf("error!");
}
while((menu_ch<0)||(menu_ch>9));
return(menu_ch);
}
void Show_menu()/*显示菜单 */
{

printf("                欢迎使用学生成绩管理系统                     \n");
printf("*************************************************************\n");
    printf("         1.显示数据         |         2.删除数据             \n");
printf("         3 查询数据         |         4.输入数据             \n");
printf("         5.修改数据         |         6.备份数据             \n");
printf("         7.设置口令         |         8.数据排序             \n");
printf("         0.退出                                              \n");
    printf("*************************************************************\n");
}
void clear()/*清屏 */
{
system("pause");
system("cls");
}
void menu()/*菜单响应 */
{
while(1)
{
Show_menu();
switch(get_menu_choice())
{
case 1:Show();clear();
break;
case 2:Delete(file_operate("wb"));clear();
break;
case 3:Find();clear();
break;
case 4:Input(file_operate("ab"));clear();
break;
case 5:Alter(file_operate("wb"));clear();
break;
case 6:Save();clear();
break;
case 7:set_psw();clear();
break;
case 8:Sort_menu();
break;
case 0:system("cls");
printf("*****************************\n");
printf("       欢迎使用本程序!       \n");
printf("*****************************\n");
exit(0);
}
}
}
void Show()/*显示打印所有的信息 */
{
int i;
printf("有%d个记录:\n",total);
PrintTitle();
for(i=0;i<total;i++)
Showoneperson(i);
}
void Showoneperson(int i) /*显示打印一个人的信息 */
{
printf(" %8d    %8s    %1c    %3d    %3d     %3d      %3d \n",student[i].no,student[i].name,student[i].sex,student[i].mark[0],student[i].mark[1],student[i].mark[2],student[i].mark[3]);
}
void PrintTitle()/*打印头信息  */
{
printf("-----------------------------------------------------------------\n");
printf("  学号            姓名  性别   语文   数学   英语   平均成绩   \n");
printf("-----------------------------------------------------------------\n");
}
void Init() /*初始化,文件不存在,则建立,同时记录下文件中的记录数   */
{
int i;
FILE *fp;
total=0;
if((fp=fopen("student.txt","rb"))==NULL) 
{
fp=fopen("student.txt","ab");
clear();
menu(); 
}
else 
{
for(i=0;feof(fp)==0;i++)
Readfile(i,fp);
}
total=i-1; 
fclose(fp);
}
void Readfile(int i,FILE *fp)/*读一条记录从文件 */
{
int j;
fscanf(fp,"%8d",&student[i].no);
fscanf(fp,"%8s  ",&student[i].name);
fscanf(fp,"%1c",&student[i].sex);
for(j=0;j<4;j++)
fscanf(fp,"%3d",&student[i].mark[j]);
}
int CheckNumber(int no_temp)/*检查学号是否存在,存在返回序号,不存在返回-1 */
{
int i,result;
for(i=0;i<total;i++)
{
if(student[i].no==no_temp)
{
result=1;
break;
}
}
if(result==1)
return i;
else
return -1;
}
int Inputoneperson(int i)/*向数组增加一条记录  */
{
    int j,sum=0;
int no_temp;
do
{
printf("输入学号:(如10141301)");
scanf("%d",&no_temp);
if(no_temp<10141301)
printf("error!");
}
while(no_temp<10141301);
if(CheckNumber(no_temp)>0)
{
printf("Number repeatly!\n");
return 0;
}
else
{
student[i].no=no_temp;
printf("Input name(lessthan 20 numbers):");
scanf("%s",student[i].name);
printf("Sex(M/W):");
scanf("%s",&student[i].sex);
printf("\n 语文\t 数学\t 英语\n");
for(j=0;j<3;j++)
{
scanf("%d",&student[i].mark[j]);
sum=sum+student[i].mark[j];
}
student[i].mark[3]=sum/3;
PrintTitle(); 
Showoneperson(i);
return 1;
}
}
void Input(FILE *fp)/*向管理系统中增加记录  */
{
int i;
i=total;
if(Inputoneperson(i))
{
total++;
Inputfile(i,fp);
}
fclose(fp);
}
void Inputfile(int i,FILE *fp) /*把下标为i 的记录写入文件 */
{
int j;
fprintf(fp,"%8d",student[i].no);
fprintf(fp,"%8s  ",student[i].name);
fprintf(fp,"%1c ",student[i].sex);
for(j=0;j<4;j++)
fprintf(fp,"%3d ",student[i].mark[j]);
}

void exchange(int i,int j)/*交换两个人的所有信息  */
{
int k;
int no_temp,mark_temp;
char name_temp[20],sex_temp;
no_temp=student[i].no;
student[i].no=student[j].no;
student[j].no=no_temp;
for(k=0;k<4;k++)
{
mark_temp=student[i].mark[k];
student[i].mark[k]=student[j].mark[k];
student[j].mark[k]=mark_temp;
}
strcpy(name_temp,student[i].name);
strcpy(student[i].name,student[j].name);
strcpy(student[j].name,name_temp);
sex_temp=student[i].sex;
student[i].sex=student[j].sex;
student[j].sex=sex_temp;
}
FILE *file_operate(char *mode)/*文件操作 */
{
char choice;
FILE *fp;
do
{
fflush(stdin);
if((fp=fopen("student.txt",mode))==NULL)
{
puts("Fail to open the file!");
puts("Try again!(Y/N)?");
scanf("%c",&choice);
}
}
while(choice=='y'||choice=='Y');
if(choice=='n'||choice=='N')
exit(1); 
return(fp);
}
void Find()/*查找记录的函数  */
{
int i,no_temp;
FILE *fp;
fp=file_operate("rb");
for(i=0;feof(fp)==0;i++)
Readfile(i,fp);
total=i-1; 
fclose(fp);
printf("Input the number that someone you want to find:(如10141303)");
scanf("%d",&no_temp);
i=CheckNumber(no_temp);
if(i>=0)
{
PrintTitle();
Showoneperson(i);
}
else
{
printf("Nobody is the number:%d\n",no_temp);
}
}
void Save()/*备份信息到文件  */
{
int i;
char filename[10],ch;
FILE *fp;
printf("Name the new file:(less than ten bits)");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{
printf("Fail to build the file!\n");
exit(0);
}
ch=getchar();
for(i=0;i<total;i++)
Inputfile(i,fp);
Show();
fclose(fp);
}
void Delete(FILE *fp)/*删除记录 */
{
int i,j,k,no_temp,choice2;
printf("Inpute the number someone you needed:(如10141301)");
scanf("%d",&no_temp);
i=CheckNumber(no_temp);
if(i>=0)
{
PrintTitle();
Showoneperson(i);
printf("Sure to delete the person?(1,Y/2,N)");
scanf("%d",&choice2);
if(choice2==1)
{
for(j=i;j<total;j++)
{
strcpy(student[j].name,student[j+1].name);
student[j].sex=student[j+1].sex;
student[j].no=student[j+1].no;
for(k=0;k<4;k++)
{
student[j].mark[k]=student[j+1].mark[k];
}
}
total--;
for(k=0;k<total;k++)
Inputfile(k,fp);
}
}
else
   printf("Nobody is the number:%d\n",no_temp);
}
void Alter(FILE *fp)/*修改记录信息  */
{
int i,j,no_temp,sum=0;
printf("Inpute the number somesoe you want to alter:(如10141301)");
scanf("%d",&no_temp);
i=CheckNumber(no_temp);
if(i>=0)
{
student[i].no=no_temp;
printf("Input name(less than 20 numbers):");
scanf("%s",student[i].name);
printf("Sex(M/W):");
scanf("%c",&student[i].sex);
printf("\n 语文\t 数学\t 英语\n");
for(j=0;j<3;j++)
{
scanf("%d",&student[i].mark[j]);
sum=sum+student[i].mark[j];
}
student[i].mark[3]=sum/3;
PrintTitle();
Showoneperson(i);
for(j=0;j<total;j++)
Inputfile(j,fp);
}
else
printf("Nobody is the number:%d\n",no_temp);
}
int Sort_menu_choice()/*选择是按学号还是成绩排序*/
{
int choice;
do
{
printf("输入排序方式(1 按学号  2 按平均成绩): ");
scanf("%d",&choice);
if((choice<0)||(choice>2))
printf("error!");
}
while((choice<0)||(choice>2));
return(choice);
}
void Sort_no()/*选择是按学号排序*/
{
int i,j;
for(i=0;i<total-1;i++)
{
for(j=i+1;j<total;j++)
{
if(student[i].no>student[j].no)
exchange(i,j);
}
}
}
void Sort_mark()/*选择是按成绩排序*/
{
int i,j;
for(i=0;i<total-1;i++)
{
for(j=i+1;j<total;j++)
{
if(student[i].mark[3]<student[j].mark[3])
exchange(i,j);
}
}
}
void Sort_menu()/*排序菜单*/
{
switch(Sort_menu_choice())
{
case 1:Sort_no();
  Sort_save();
  clear();
  break;
case 2:Sort_mark();
  Sort_save();
  clear();
  break;
}
}
void Sort_save()/*排序后数据写入文件*/
{
int i;
FILE *fp;
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("Fail to save the file!\n");
exit(0);
}
for(i=0;i<total;i++)
Inputfile(i,fp);
Show();
fclose(fp);
}

void set_psw()/*设置密码  */
{
char psw_set[20],psw_check[20],c;
unsigned int i;
FILE *fp;
do
{   printf("You must set password first!\n");
printf("Enter password:(lessthan 12 numbers and key'.'for end)\n");
for(i=0;(c=getch())!='.';i++)
{
putchar('*');
psw_set[i]=c;
}
psw_set[i]='\0';
printf("\n------------\n");
printf("conform password:");
for(i=0;(c=getch())!='.';i++)
{
putchar('*');
psw_check[i]=c;
}
psw_check[i]='\0';
        printf("\n------------\n");
if(strcmp(psw_set,psw_check)==0)
{printf("Set password success!");
strcpy(password,psw_set);
}
else
printf("error!\n");
}
while(strcmp(psw_set,psw_check)!=0);    
clear();
fp=fopen("password.txt","wb");
fprintf(fp,"%s",password);
fclose(fp);
}

int psw_check()/*密码验证  */
{
unsigned int i=1,j=1;
FILE *fp;
char pword[20],c;
if((fp=fopen("password.txt","rb"))==NULL) 
{
fp=fopen("password.txt","a"); 
set_psw();
}
fscanf(fp,"%s",password); 
fclose(fp);
do
{
printf("\nInput password:key'.'for end(%d/three times)",j);
for(j=0;(c=getch())!='.';j++)
{
putchar('*');
pword[j]=c;
}
pword[j]='\0';
i++;
}
while(strcmp(pword,password)!=0&&i<=3);
if(i<=3)
return 1;
else
{
printf("You have tryed for three times,fail to open the file!\n");
return 0;
}

}

void main()/*主函数*/
{
if(psw_check())
{
Init();
clear();
menu();
}

}

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog:http://blog.csdn.net/dingxiaowei2013              MyQQ:1213250243

MyTel:13262983383 

====================== 相互学习,共同进步 ===================

时间: 2024-09-06 06:47:59

学生成绩管理系统【c】的相关文章

Java学生成绩管理系统源代码

源代码 import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.Pr

对《一个简单的学生成绩管理系统》优化的一点意见

现在我们开始讨论优化的问题,在讨论之前,建议先看看<一个简单的学生成绩管理系统>这篇文章.我看过<一个简单的学生成绩管理系统>后,觉他其中的show()这个函数用得不是很好. show()函数的代码如下: show() { m_Set.MoveFirst(); do { CString s; s.Format("%d",m_Set.m_column1); m_ListCtrlx.InsertItem(i,s,0); m_ListCtrlx.SetItemText

学生信息管理系统-java基于命令行的学生成绩管理系统

问题描述 java基于命令行的学生成绩管理系统 1.设计学生类接口: 2.使用集合框架,实现学生成绩的插入.通过名字查询.显示各科成绩排名列表.显示各科成绩通过学生学号的排名列表. 3.将内存中的集合框架对象进行持久化,下一次运行系统时可直接调用(基础比较差,希望在线指导,不要求源代码,但求思路指导,) 解决方案 成绩录入.可以录入文件.黑屏 输入姓名+各科成绩.直接流写入txt文件. 查询.可以先将文件按行读出,存储在list或者map中.遍历查询输出即可. 解决方案二: 1.持久化 可以持久

c++ 编程问题-学生成绩管理系统编程问题

问题描述 学生成绩管理系统编程问题 学生成绩管理系统设计说明与要求:学生成绩管理是高等学校教务管理的重要组成部分,其内容较多,要求设计的管理系统能够完成以下八种功能: 1) 登记学生成绩(学号.姓名.英语.数学.C++语言-): 2) 修改学生成绩: 3) 打印一个班级学生的单科成绩: 4) 求出每个学生一学期中各科的平均成绩: 5) 打印某一课程成绩处于指定分数段内的学生名单. 6) 成绩统计(各科平均成绩.各科成绩"优秀"."良好"."中等"

c++-学生成绩管理系统课程设计中的问题

问题描述 学生成绩管理系统课程设计中的问题 如上图所示,只剩下两类bug, 不知道是哪方面的问题 PS我在类的后面都加了分好:,所以"PCH......."的那个bug不是分号的问题 解决方案 基本是语法错误,错误的引起不一定是你看到的,也许是因为其他错误导致的提示,比如括号匹配错误 解决方案二: 你的程序在哪里? 你的头文件有没有问题,比如漏分号,特别是class struct之类的. 包含了以后问题比较隐蔽. 解决方案三: 全是语法错误. 虽然报了这么多, 但是可能就只是一个地方的

java-Java课程设计-学生成绩管理系统

问题描述 Java课程设计-学生成绩管理系统 功能实现:单科排名,总分排名,添加删除修改学生信息,存储信息. 要求:SQL和eclipse完成. 解决方案 http://wenku.baidu.com/link?url=i_g0PwiUDExCwlXWi14IPueiYQGQU0G0_1PerWnyYlb1j_RzlQs9rrxHE9GVEKIDNiqeNmAP42goA91vbv_0J-BVDhVCNN7S1tWNi_y3NoS 解决方案二: http://www.doc88.com/p-60

该程序如何编写-学生成绩管理系统对于c++的初学者怎么写

问题描述 学生成绩管理系统对于c++的初学者怎么写 学生成绩管理系统(★★) 问题描述:主要功能是对批量学生的各门成绩进行录入.修改.查询.统计等,要求方便快速.记录学生的学号.姓名.班级.性别.联系电话以及课程和成绩:可以对学生的成绩按学号和姓名进行查寻:输出显示学生成绩:并实现排序.统计及格率和优秀率功能. 编程任务: (1)界面基本要求: 学生成绩管理系统 ** F1 --帮助 ** ** F2 --输入数据并存入文件 ** ** F3 --根据学号查询成绩 ** ** F4 --根据姓名

编程c语言-求c++编写学生成绩管理系统

问题描述 求c++编写学生成绩管理系统 求c++编写学生成绩管理系统,要求可以增加,删除,修改查询,,功能 解决方案 http://www.doc88.com/p-698583418612.html 解决方案二: http://blog.csdn.net/sdliujiangbo/article/details/7693269http://wenku.baidu.com/link?url=CjxxWkRyzIFRCDHKjZnbxsv6O3GrmOb15SBHLP1ccXEdmuc7A6Ou05

sqlserver2005-关于MVC+Jsp模式学生成绩管理系统中src下servlet和bean的设置问题

问题描述 关于MVC+Jsp模式学生成绩管理系统中src下servlet和bean的设置问题 <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %> 无标题文档 /jsp:useBean <% if(stu_id==null){response.sendRedirect("login.jsp"