学生成绩管理系统[C]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAX 2000
struct Student
{
int no; /*学号*/
char name[]; /*姓名*/
char sex; /*性别*/
char phone[];/*联系电话*/
int mark[]; /*语文、数学、外语、考试平均成绩*/
};
int total; /*总人数*/
char password[];/*密码*/
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<)||(menu_ch>))
printf("error!");
}
while((menu_ch<)||(menu_ch>));
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()
{
Show_menu();
switch(get_menu_choice())
{
case :Show();clear();
break;
case :Delete(file_operate("wb"));clear();
break;
case :Find();clear();
break;
case :Input(file_operate("ab"));clear();
break;
case :Alter(file_operate("wb"));clear();
break;
case :Save();clear();
break;
case :set_psw();clear();
break;
case :Sort_menu();
break;
case :system("cls");
printf("*****************************\n");
printf(" 欢迎使用本程序! \n");
printf("*****************************\n");
exit();
}
}
}
void Show()/*显示打印所有的信息 */
{
int i;
printf("有%d个记录:\n",total);
PrintTitle();
for(i=;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[],student[i].mark[],student[i].mark[],student[i].mark[]);
}
void PrintTitle()/*打印头信息 */
{
printf("-----------------------------------------------------------------\n");
printf(" 学号 姓名 性别 语文 数学 英语 平均成绩 \n");
printf("-----------------------------------------------------------------\n");
}
void Init() /*初始化,文件不存在,则建立,同时记录下文件中的记录数 */
{
int i;
FILE *fp;
total=;
if((fp=fopen("student.txt","rb"))==NULL)
{
fp=fopen("student.txt","ab");
clear();
menu();
}
else
{
for(i=;feof(fp)==;i++)
Readfile(i,fp);
}
total=i-;
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=;j<;j++)
fscanf(fp,"%3d",&student[i].mark[j]);
}
int CheckNumber(int no_temp)/*检查学号是否存在,存在返回序号,不存在返回-1 */
{
int i,result;
for(i=;i<total;i++)
{
if(student[i].no==no_temp)
{
result=;
break;
}
}
if(result==)
return i;
else
return -;
}
int Inputoneperson(int i)/*向数组增加一条记录 */
{
int j,sum=;
int no_temp;
do
{
printf("输入学号:(如10141301)");
scanf("%d",&no_temp);
if(no_temp<)
printf("error!");
}
while(no_temp<);
if(CheckNumber(no_temp)>)
{
printf("Number repeatly!\n");
return ;
}
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=;j<;j++)
{
scanf("%d",&student[i].mark[j]);
sum=sum+student[i].mark[j];
}
student[i].mark[]=sum/;
PrintTitle();
Showoneperson(i);
return ;
}
}
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=;j<;j++)
fprintf(fp,"%3d ",student[i].mark[j]);
} void exchange(int i,int j)/*交换两个人的所有信息 */
{
int k;
int no_temp,mark_temp;
char name_temp[],sex_temp;
no_temp=student[i].no;
student[i].no=student[j].no;
student[j].no=no_temp;
for(k=;k<;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();
return(fp);
}
void Find()/*查找记录的函数 */
{
int i,no_temp;
FILE *fp;
fp=file_operate("rb");
for(i=;feof(fp)==;i++)
Readfile(i,fp);
total=i-;
fclose(fp);
printf("Input the number that someone you want to find:(如10141303)");
scanf("%d",&no_temp);
i=CheckNumber(no_temp);
if(i>=)
{
PrintTitle();
Showoneperson(i);
}
else
{
printf("Nobody is the number:%d\n",no_temp);
}
}
void Save()/*备份信息到文件 */
{
int i;
char filename[],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();
}
ch=getchar();
for(i=;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>=)
{
PrintTitle();
Showoneperson(i);
printf("Sure to delete the person?(1,Y/2,N)");
scanf("%d",&choice2);
if(choice2==)
{
for(j=i;j<total;j++)
{
strcpy(student[j].name,student[j+].name);
student[j].sex=student[j+].sex;
student[j].no=student[j+].no;
for(k=;k<;k++)
{
student[j].mark[k]=student[j+].mark[k];
}
}
total--;
for(k=;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=;
printf("Inpute the number somesoe you want to alter:(如10141301)");
scanf("%d",&no_temp);
i=CheckNumber(no_temp);
if(i>=)
{
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=;j<;j++)
{
scanf("%d",&student[i].mark[j]);
sum=sum+student[i].mark[j];
}
student[i].mark[]=sum/;
PrintTitle();
Showoneperson(i);
for(j=;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<)||(choice>))
printf("error!");
}
while((choice<)||(choice>));
return(choice);
}
void Sort_no()/*选择是按学号排序*/
{
int i,j;
for(i=;i<total-;i++)
{
for(j=i+;j<total;j++)
{
if(student[i].no>student[j].no)
exchange(i,j);
}
}
}
void Sort_mark()/*选择是按成绩排序*/
{
int i,j;
for(i=;i<total-;i++)
{
for(j=i+;j<total;j++)
{
if(student[i].mark[]<student[j].mark[])
exchange(i,j);
}
}
}
void Sort_menu()/*排序菜单*/
{
switch(Sort_menu_choice())
{
case :Sort_no();
Sort_save();
clear();
break;
case :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();
}
for(i=;i<total;i++)
Inputfile(i,fp);
Show();
fclose(fp);
} void set_psw()/*设置密码 */
{
char psw_set[],psw_check[],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=;(c=getch())!='.';i++)
{
putchar('*');
psw_set[i]=c;
}
psw_set[i]='\0';
printf("\n------------\n");
printf("conform password:");
for(i=;(c=getch())!='.';i++)
{
putchar('*');
psw_check[i]=c;
}
psw_check[i]='\0';
printf("\n------------\n");
if(strcmp(psw_set,psw_check)==)
{printf("Set password success!");
strcpy(password,psw_set);
}
else
printf("error!\n");
}
while(strcmp(psw_set,psw_check)!=);
clear();
fp=fopen("password.txt","wb");
fprintf(fp,"%s",password);
fclose(fp);
} int psw_check()/*密码验证 */
{
unsigned int i=,j=;
FILE *fp;
char pword[],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=;(c=getch())!='.';j++)
{
putchar('*');
pword[j]=c;
}
pword[j]='\0';
i++;
}
while(strcmp(pword,password)!=&&i<=);
if(i<=)
return ;
else
{
printf("You have tryed for three times,fail to open the file!\n");
return ;
} } void main()/*主函数*/
{
if(psw_check())
{
Init();
clear();
menu();
}
}
详细论文:http://download.csdn.net/detail/s10141303/5622563
学生成绩管理系统[C]的更多相关文章
- Java项目:学生成绩管理系统(二)
学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...
- Java项目:学生成绩管理系统(一)
学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...
- 【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).
原文网址:http://blog.csdn.net/ministarler/article/details/17018839 c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是 ...
- 学生成绩管理系统 1.0(Java+MySql)
真难…… 数据库建立不会,中文编码不会,插入数据不会,删除不会…… Java读入数据不会……数据库连接不会…… 你也好意思说自己是学计算机的啊魂淡…… 我会慢慢写2.0,3.0版的……噗…… src/ ...
- 《C语言编写 学生成绩管理系统》
/* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名: 学生成绩管理 ...
- c++学生成绩管理系统
虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...
- 使用C++名单在文档处理和学生成绩管理系统相结合
对于学生成绩管理系统,我并不陌生,几乎学习C人的语言.做项目会想到学生成绩管理系统,我也不例外.在研究中的一段时间C语言之后,还用C语言到学生管理系统,然后做几个链接.计数,这个系统是以前的系统上的改 ...
- C语言练手自己编写学生成绩管理系统
#include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...
- 《C语言 学生成绩管理系统》
/* (盯着先拔头筹程序) * 该计划的版权声明和版本号 * Copyright (c) 2011, 烟台大学计算机学院学生的学校 * All rights reserved. * 文件名: 学生成绩 ...
随机推荐
- ulimit命令
原文链接 linux下默认是不产生core文件的,要用ulimit -c unlimited放开 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件 ...
- vs2013 内置IIS Express相关问题
问题描述,以前做的程序迁移到vs2013后出现500.22问题. HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设 ...
- 将数据导入带模板EXCEL
在EXCEL模板里设置好样式和格式 点击事件 private void btnReport_Click(object sender, EventArgs e) { ...
- POJ 1190(深搜)
http://poj.org/problem?id=1190 又有好久没做搜索的题了,没想到做一个卡了我那么久,想哭啊. 一个中文题,思路呢也就是搜索呗,一层一层往上面搜,不过这里有两个比较重要的地方 ...
- HttpServletRequest中得到各种信息
1.获得domain: StringBuffer url = request.getRequestURL(); String domain = url.delete(url.length() - re ...
- javascript 事件委托,jq,js模拟事件
<!DOCTYPE> <html> <head> <title></title> <script src="Scripts/ ...
- NoSQL之【MongoDB】学习(二):DML和查询操作说明
摘要: 操作MongoDB的方法和关系型数据库差别很大,现在对他们进行说明,后期会逐步完善. ##开头表示MySQL** 开头表示MongoDB 创建: Mongodb:文档数据库,擅长存非结构化数据 ...
- ffmpeg-20160803-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...
- oracle,mysql对敏感,关键字等处理
oracle用"" 比如,处理字段中间有空格,
- oracle一条sql语句统计充值表中今天,昨天,前天三天充值记录
select NVL(sum(case when create_date_time>=to_date('2014-11-24 00:00:00','yyyy-mm-dd hh24:mi:ss') ...