#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)学生成绩管理系统的更多相关文章

  1. Java项目:学生成绩管理系统(二)

    学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...

  2. Java项目:学生成绩管理系统(一)

    学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...

  3. 学生成绩管理系统[C]

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...

  4. 【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).

    原文网址:http://blog.csdn.net/ministarler/article/details/17018839 c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是 ...

  5. 学生成绩管理系统 1.0(Java+MySql)

    真难…… 数据库建立不会,中文编码不会,插入数据不会,删除不会…… Java读入数据不会……数据库连接不会…… 你也好意思说自己是学计算机的啊魂淡…… 我会慢慢写2.0,3.0版的……噗…… src/ ...

  6. 《C语言编写 学生成绩管理系统》

    /* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名: 学生成绩管理 ...

  7. c++学生成绩管理系统

    虽然比较水 =.= 但是写了两节课+一个中午 都是强迫症的锅 http://www.cnblogs.com/wenruo/p/4940182.html #include <cstdio> ...

  8. 使用C++名单在文档处理和学生成绩管理系统相结合

    对于学生成绩管理系统,我并不陌生,几乎学习C人的语言.做项目会想到学生成绩管理系统,我也不例外.在研究中的一段时间C语言之后,还用C语言到学生管理系统,然后做几个链接.计数,这个系统是以前的系统上的改 ...

  9. C语言练手自己编写学生成绩管理系统

    #include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...

  10. 《C语言 学生成绩管理系统》

    /* (盯着先拔头筹程序) * 该计划的版权声明和版本号 * Copyright (c) 2011, 烟台大学计算机学院学生的学校 * All rights reserved. * 文件名: 学生成绩 ...

随机推荐

  1. ios9配置info.plist中关于安全访问问题

    打开info.plist文件 - >添加App Transport Security Settings 字典类型,在App Transport Security Settings下增加Allow ...

  2. 关于sql 外键的讨论。

    外键是否采用看业务应用场景,以及开发成本的,大致列下什么时候适合,什么时候不适合使用: 1. 互联网行业应用不推荐使用外键: 用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制 ...

  3. hql中or的用法(代替union)

    hql中不支持union和unionAll关键字因为在查询出的结果集中无法进行排序.代替union起到相同作用的 是or关键字.在构造hql时考虑使用or代替union产生多个结果集的组合. 详解如下 ...

  4. Android.Hacks.01_Centering views using weights

    Android.Hacks读书笔记01 #1#权重布局之解析: LinearLayout ’s android:weightSum      LinearLayout ’s child android ...

  5. PHP发红包程序

    //红包算法$total = 20;   //红包总金额$num = 10;     //红包个数$min = 0.01;   //每个人最少能收到0.01 for ($i=1;$i<$num; ...

  6. Canvas、Paint、的简单使用及辅助类(Path、Shader、简介)

    1.Canvas类 作用:1.绘制各种图形.图片.字等.2.提供各种方法进行坐标变换(rotate.scale.skew.translate) 获取Canvas:一般是子类继承View并重写onDra ...

  7. BuildSigar

    https://support.hyperic.com/display/SIGAR/Home;jsessionid=7436F86CA13B66BCE1A827043E159F34#Home-down ...

  8. Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表

    一.概念 1,ASCII             ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是 ...

  9. c++策略模式

    这几天需要学习一下设计模式来为设计代码结构使得代码可扩展性强,代码更加易于维护,不用想很长时间也不知道怎么去设计一个工具的代码. 我的理解策略模式: 1.有一个策略基类,策略类是什么呢?策略类就是一个 ...

  10. 自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本

    这里面Shell的各个操作含义,可參考我三年前的这篇文章:http://blog.csdn.net/jadyer/article/details/7960802 #!/bin/sh APP_NAME= ...