(C)学生成绩管理系统
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h> struct Student
{
char id[];
char name[];
int score;
}; typedef struct User
{
char userName[];
char userPassword[];
}UserInfo; void inputNameAndPassword();
void logon();
void creatDataBace();
void selectServe();
void checkAchievement();
void addAchievement();
void delectAchievement();
void changeAchievement();
void sortAchievement();
void start(); int main(int argc, const char * argv[])
{
start();
//清屏未实现
system("clear"); FILE *file;
file=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r+");
struct Student aStudent;
if (fread(&aStudent, sizeof(struct Student), , file)==) {
creatDataBace();
}
fclose(file);
//清屏未实现 selectServe(); return ;
} void start()
{
int land;
printf("1.注册\n2.登陆\n");
scanf("%d",&land);
if (land==) {
logon();
}else
{
if (land==)
inputNameAndPassword();
else
{
printf("输入有误,请重新选择\n");
start();
}
}
} void logon()
{
UserInfo userInput;
printf("\n------------------注册用户------------------");
printf("\n请输入注册用户名:");
scanf("%s",userInput.userName);
printf("请输入密码:");
scanf("%s",userInput.userPassword);
FILE *fp;
if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/user_password.txt", "a+"))==NULL)
{
printf("注册失败!");
exit();
}
if ((fwrite(&userInput, sizeof(UserInfo), , fp))!=) {
printf("注册失败!");
exit();
}
fclose(fp);
inputNameAndPassword();
} void inputNameAndPassword()
{
UserInfo userInput,userBase[];
int i=,count=,chance=; FILE *fp;
if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/user_password.txt", "r"))==NULL)
{
printf("登陆失败!");
exit();
} while(fread(&userBase[i], sizeof(UserInfo), , fp)!=)
i++;
count=i;
fclose(fp); printf("\n------------------用户登陆------------------\n");
while ()
{
printf("用户名:");
scanf("%s",userInput.userName);
printf("密码:");
scanf("%s",userInput.userPassword); //密码用星号代替未实现 for (i=; i<count; i++) {
if((strcmp(userInput.userName, userBase[i].userName)==)&&(strcmp(userInput.userPassword, userBase[i].userPassword)==))
return;
}
if (chance!=)
printf("\n用户名或密码输入错误,请重新输入(还有 %d 次机会):\n",-chance);
chance++;
if (chance>=) {
printf("\n尝试超出次数!退出程序。");
exit();
}
}
} void selectServe()
{
int serveNumber;
printf("\n------------------操作菜单------------------");
printf("\n1.查询学生成绩\n2.添加学生成绩\n3.删除学生成绩\n4.修改学生成绩\n5.查看成绩排名\n");
printf("\n请选择您需要的操作(输入序号选择,输入其它退出程序):");
scanf("%d",&serveNumber);
switch (serveNumber) {
case :
checkAchievement();
break;
case :
addAchievement();
break;
case :
delectAchievement();
break;
case :
changeAchievement();
break;
case :
sortAchievement();
break;
default:
break;
}
printf("\n ^^ 再见.....");
} void creatDataBace()
{
FILE *fp;
struct Student student[];
int flag=;
int i=;
int k=;
int count=;
int m=;
char ch; if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r"))==NULL)
{
printf("打开文件错误!");
exit();
} for (i=;fread(&student[i], sizeof(struct Student), , fp)!=;i++);
count=i;
fclose(fp); printf("\n------------------初始化数据库------------------");
i=;
while () {
printf("\n请输入学生的基本信息:\n");
do
{
printf("第 %d 个学生的ID号:",i+);
scanf("%s",student[i].id); for (k=i-; k>=; k--) {
if(strcmp(student[i].id, student[k].id)==)
{
printf("\nID号已存在,请重新输入\n");
flag=;
break;
}
} for (k=; k<count; k++) {
if(strcmp(student[i].id, student[k].id)==)
{
printf("\nID号在整个数据库中已存在,请重新输入\n");
flag=;
break;
}
}
}while(flag); do
{
flag=;
printf("学生名称:");
scanf("%s",student[i].name);
}while (flag); do
{
flag=;
printf("学生成绩:");
scanf("%d",&student[i].score);
if (student[i].score>||student[i].score<) {
flag=;
continue;
}
}while (flag); i++;
m++;
printf("\n是否继续创建学生成绩信息?输入'y'或'Y'继续,输入其它进入下一步:");
getchar();
scanf("%c",&ch);
if (ch!='Y'&&ch!='y')
break;
} if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "a"))==NULL)
{
printf("打开文件错误!");
exit();
} for (i=; i<m; i++) {
if (fwrite(&student[i], sizeof(struct Student), , fp)!=)
printf("数据保存失败");
} fclose(fp);
} void checkAchievement()
{
struct Student student;
char id[];
FILE *fp; printf("\n------------------查询学生成绩------------------\n");
printf("请输入需要查询的学生ID:");
scanf("%s",id);
while ()
{
if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&student, sizeof(struct Student), , fp)!=) {
if (strcmp(id,student.id)==) {
printf("ID:%s 姓名:%s 分数:%d\n",student.id,student.name,student.score);
break;
}
} if (strcmp(id,student.id)!=)
printf("没查找到ID为 %s 的学生信息。\n",id); printf("\n请输入需要查询的学生ID(输入n返回操作菜单):");
scanf("%s",id);
if (strcmp(id,"n")==||strcmp(id,"N")==) {
fclose(fp);
selectServe();
}
fclose(fp);
}
} void addAchievement()
{
FILE *fp;
struct Student student[];
int i=;
int count=;
char ch; if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} for (i=;fread(&student[i], sizeof(struct Student), , fp)!=;i++);
count=i;
fclose(fp); if((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt", "a+"))==NULL)
{
printf("打开文件错误!");
selectServe();
} printf("\n------------------添加学生成绩------------------");
while ()
{
int flag;
do {
flag=;
printf("\n请输入需要添加的学生ID:");
scanf("%s",student[count].id);
for (int k=; k<count; k++) {
if(strcmp(student[count].id, student[k].id)==)
{
printf("ID号在数据库中已存在,请重新输入。\n");
flag=;
break;
}
}
} while (flag);
printf("请输入需要添加的学生姓名:");
scanf("%s",student[count].name);
printf("请输入需要添加的学生分数:");
scanf("%d",&student[count].score);
if (fwrite(&student[count], sizeof(struct Student), , fp)!=) {
printf("添加失败!");
}
printf("添加成功!\n");
printf("\n是否继续添加学生成绩信息?输入y继续,输入其它返回操作菜单:");
getchar();
scanf("%c",&ch);
if (ch!='y'&&ch!='Y') {
fclose(fp);
selectServe();
}
count++;
}
} void delectAchievement()
{
char id[];
char sure;
FILE *infile,*outfile;
struct Student students[];
int i=,flag=-,count=; printf("\n------------------删除学生成绩------------------"); if ((infile=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&students[i], sizeof(struct Student), , infile)!=) i++;
count=i;
fclose(infile); printf("\n请输入需要删除的学生ID:");
scanf("%s",id);
while ()
{
for (i=; i<count; i++) {
if (strcmp(id,students[i].id)==) {
flag=i;
break;
}
} if (flag==-)
printf("没查找到ID为 %s 的学生信息。",id);
else
{
printf("确认要删除ID为 %s 的学生信息吗?(y确定 n取消)",id);
getchar();
scanf("%c",&sure);
if (sure=='y')
{
for (i=flag; i<count-; i++) {
students[i]=students[i+];
}
count--; outfile=fopen("/Users/5000/Desktop/C:OC作业/Final Project/temp.txt","w+");
for (i=; i<count; i++) {
if(fwrite(&students[i], sizeof(struct Student), , outfile)!=)
{
printf("删除失败!");
selectServe();
}
}
fclose(outfile);
}
printf("删除成功!\n");
} printf("\n请输入需要删除的学生ID(输入n返回操作菜单):");
scanf("%s",id); if (strcmp(id,"n")==||strcmp(id,"N")==) {
/*其实用w打开原来文件就可以直接写入原来的文件,w打开会清空原来文件的内容*/
unlink("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt");//#include <unistd.h>
rename( "/Users/5000/Desktop/C:OC作业/Final Project/temp.txt","/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt");//#include <unistd.h>
selectServe();
}
}
} void changeAchievement()
{
FILE *fp;
char id[],ch;
int score=,count=,flag=;
int i=;
struct Student students[]; if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
}
while (fread(&students[i], sizeof(struct Student), , fp)!=) i++;
count=i;
fclose(fp); printf("\n------------------学生成绩排名------------------\n");
while ()
{
printf("请输入需要修改成绩的学生ID:");
scanf("%s",id); for (i=;i<count;i++) {
if (strcmp(id,students[i].id)==) {
printf("ID为 %s 的%s同学,分数为:%d\n",students[i].id,students[i].name,students[i].score);
printf("更改%s同学的分数值为:",students[i].name);
scanf("%d",&score);
students[i].score=score;
flag=;
break;
}
} if (flag)
printf("没查找到ID为 %s 的学生信息。\n",id); if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","w+"))==NULL)
{
printf("打开文件错误!");
selectServe();
}
for (i=; i<count; i++) {
if(fwrite(&students[i], sizeof(struct Student), , fp)!=)
{
printf("修改失败!");
selectServe();
}
} printf("\n是否继续查询学生成绩信息?输入'y'或'Y'继续,输入其它返回操作菜单:");
getchar();
scanf("%c",&ch);
if (ch!='y'&&ch!='Y') {
fclose(fp);
selectServe();
}
}
} void sortAchievement()
{
char ch;
FILE *fp;
struct Student students[],temp;
int i=,j=,count=; if ((fp=fopen("/Users/5000/Desktop/C:OC作业/Final Project/achievement.txt","r"))==NULL)
{
printf("打开文件错误!");
selectServe();
} while (fread(&students[i], sizeof(struct Student), , fp)!=) i++;
fclose(fp);
count=i; printf("\n------------------学生成绩排名------------------\n");
for(i=;i<count-;i++)
for(j=;j<count--i;j++)
{
if (students[j].score<students[j+].score) {
temp=students[j];
students[j]=students[j+];
students[j+]=temp;
}
}
printf("ID Name Score\n"); //Id****Name******Score
for (i=; i<count; i++) {
printf("%s",students[i].id);
for (j=; j<-strlen(students[i].id); j++)
printf(" "); printf("%s",students[i].name);
for (j=; j<-strlen(students[i].name); j++)
printf(" "); printf("%d\n",students[i].score);
} printf("\n输入任意键返回操作菜单:");
getchar(); //接收选择操作4时输入的回车
scanf("%c",&ch);
selectServe(); }
运行截图:





(C)学生成绩管理系统的更多相关文章
- Java项目:学生成绩管理系统(二)
学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...
- Java项目:学生成绩管理系统(一)
学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...
- 学生成绩管理系统[C]
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...
- 【转】 [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. * 文件名: 学生成绩 ...
随机推荐
- sql 添加字段备注和查看已添加表的备注
虽然avl树和红黑树在数据搜索和排序方面都是有效的数据结构,但是都显得特别麻烦,跳跃表就显得特别简单,虽然简单 不影响他性能,在平均情况下,其插入.删除.查找数据时间复杂度都是O(log(N)),其最 ...
- C++中的namespace
本文转载来自:http://blog.csdn.net/yao_zhuang/article/details/1853625 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全 ...
- dede调取文章内容的第一张图片
dede调用文章第一张图片(非缩略图)的实现方法 这篇文章主要是介绍dede调用文章第一张图片的实现代码,需要的朋友可以参考下 需要进行两个操作 第一步,修改include/extend.func.p ...
- 在 WinForm 中打开页面采用POST方式传参http。可以多个参数传递,返回json字符串
//调用方法 Dictionary<string, string> postData = new Dictionary<string, string>(); postData. ...
- com.sun.jdi.InvocationException occurred invoking method.
文章来源于网络, 自己也遇到同样的问题,也是采用这样的方式解决的.原文链接http://zuiyanwangyue.iteye.com/blog/470638 在 HibernateDaoSuppor ...
- View的事件分发机制
一.点击事件的传递规则 传递事件的主要方法: public boolean dispatchTouchEvent(MotionEvent ev) 如果事件能够传递到当前View,则该方法一定会被调用. ...
- linux系统下安全管理
1.引导程序安全 linux系统的root密码是很容易破解的,当然前提是你没有设置引导程序密码,如GRUB或LILO,为了防止通过引导程序破译root密码,强烈建 议设置GRUB或LILO的引导密码, ...
- 打开网页自动弹出QQ临时会话 (打开网站弹出QQ聊天) qq.js文件代
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35 ...
- Linux网桥
linux网桥的功能 转发数据包 网桥的功能在延长网络跨度上类似于中继器,然而它能提供智能化连接服务,即根据帧的终点地址处于哪一网段来进行转发和滤除.网桥对站点所处网段的了解是靠"自学习&q ...
- 网易云课堂_程序设计入门-C语言_第六章:数组_1多项式加法
1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...