c实现学生成绩管理系统 MIS
来源:互联网 发布:软件测试工程师基础 编辑:程序博客网 时间:2024/06/18 17:20
#include <stdio.h>
#include <stdlib.h>
typedef struct _Student{
char name[10];
int age;
int number;
int score;
}Student;
typedef struct _Node{
Student stu;//学生信息
struct _Node * next;//指向下一个学生
}Node;
Node * head=NULL;//定义第一个学生
//函数声明
void inputStudent();//录入学生信息
void printStudent();//打印学生信息
int saveStudent();//保存学生信息
int readStudent();//读取学生信息
int countStudent();//统计所有学生人数
int findStudent();//查找学生信息
int modifyStudent();//修改学生信息
int main(int argc,const char * argv[])
{
printf("欢迎使用学生信息管理系统\n");
printf("中北镇工作室2013作品V1.0\n");
while (1) {
printf("\n请选择功能列表:");
printf("\n1.录入学生信息");
printf("\n2.打印学生信息");
printf("\n3.保存学生信息");
printf("\n4.读取学生信息");
printf("\n5.统计所有学生人数");
printf("\n6.查找学生信息");
printf("\n7.修改学生信息");
printf("\n8.退出系统\n");
char c;
scanf(" %c",&c);
switch (c) {
case '1':
inputStudent();
break;
case '2':
printStudent();
break;
case '3':
saveStudent();
break;
case '4':
readStudent();
break;
case '5':
countStudent();
break;
case '6':
findStudent();
break;
case '7':
modifyStudent();
break;
case '8':
case '0':
return 0;
break;
default:
break;
}
}
return 0;
}
//1.录入学生信息
void inputStudent(){
printf("\n请输入学生信息,姓名学号 年龄 成绩\n");
Node * p;
//p指向最后一个学生
p=head;
while (head!=NULL&&p->next!=NULL) {
p=p->next;
}
//为新的学生分配一个空间
Node * newnode=(Node *)malloc(sizeof(Node));
newnode->next=NULL;
if(head==NULL)
{
head=newnode;
p=head;
}
else
{
p->next=newnode;//p的下一个节点为newnode
}
//输入新的学生数据
scanf(" %s %d %d %d",newnode->stu.name,&newnode->stu.number,&newnode->stu.age,&newnode->stu.score);
printf("\n数据添加成功........");
}
//2.打印学生信息
void printStudent(){
printf("\n打印所有学生信息");
Node *p;
p=head;//指向第一个学生
while (p!=NULL) {
printf("\n学号%d,姓名%s,年龄%d,成绩%d",p->stu.number,p->stu.name,p->stu.age,p->stu.score);
p=p->next;
}
}
//3.保存学生信息
int saveStudent(){
printf("\n");
FILE *fp;
//打开文件
fp=fopen("//Users//mac//Desktop//studentMMS.txt","a+");
if (fp==0) {
printf("打开文件失败");
return 0;
}
//写入数据
Node *p;
p=head;
while (p!=NULL) {
fprintf(fp, "%d %s %d %d \n",p->stu.number,p->stu.name,p->stu.age,p->stu.score);
p=p->next;
}
printf("数据保存成功");
//关闭文件
fclose(fp);
return 0;
}
//4.读取学生信息
int readStudent(){
FILE *fp;
//打开文件
fp=fopen("//Users//mac//Desktop//studentMMS.txt","r");
if (fp==0) {
printf("打开文件失败");
return 0;
}
//读出数据
Student temp;
while (!feof(fp)) {
fscanf(fp, "%d %s %d %d\n",&temp.number,temp.name,&temp.age,&temp.score);
printf("学号:%d姓名:%s年龄:%d成绩:%d \n",temp.number,temp.name,temp.age,temp.score);
}
//关闭文件
fclose(fp);
return 0;
}
//5.统计所有学生人数
int countStudent(){
int number=0;
FILE *fp;
//打开文件
fp=fopen("//Users//mac//Desktop//studentMMS.txt","r");
if (fp==0) {
printf("打开文件失败");//检验是否打开了文件
return 0;
}
while (!feof(fp)) {
if(getc(fp)=='\n') {//每行一个学生数据,以换行符结束,所以用换行符来测学生人数
number++;
}
}
printf("\n共有%d个学生\n",number);
return 0;
}
//6.查找学生信息
int findStudent(){
int student_num;
printf("\n请输入要查找学生的学号:\n");
scanf("%d",&student_num);
Student temp;//创建一个临时student用来输出到屏幕
FILE *fp;
//打开文件
fp=fopen("//Users//mac//Desktop//studentMMS.txt","r");
if (fp==0) {
printf("打开文件失败");
return 0;
}
fscanf(fp, "%d",&temp.number);//首先处理第一行数据
if (temp.number==student_num) {
//若得到的学号与要查找的学号相同,则再把其他信息输出来
fscanf(fp, " %s %d %d\n",temp.name,&temp.age,&temp.score);
printf("学号:%d姓名:%s年龄:%d成绩:%d \n",temp.number,temp.name,temp.age,temp.score);
return 0;
}
//若第一行没有要查找的数据则继续往下找
while (!feof(fp)) {
if (getc(fp)=='\n') {//遇到换行符时说明即将进入下一行,即开始下个数据
fscanf(fp, "%d",&temp.number);//同第一行处理数据的方式一样。
if (temp.number==student_num) {
fscanf(fp, " %s %d %d\n",temp.name,&temp.age,&temp.score);
printf("学号:%d姓名:%s年龄:%d成绩:%d \n",temp.number,temp.name,temp.age,temp.score);
break;
}
}
}
if (feof(fp)) { //若一直到文件结尾都没查找到信息,则提示查找失败
printf("该学生信息不存在!");
}
return 0;
}
//7.修改某个学生的信息
int modifyStudent()//通过链表来实现学生信息的修改,但是这种方法不太合适。
{
int student_num;
printf("\n请输入要修改学生信息的学号:\n");
scanf("%d",&student_num);
FILE *fp;
FILE *fp2;
//打开文件
fp=fopen("//Users//mac//Desktop//studentMMS.txt","r");
if (fp==0) {
printf("打开文件失败");
return 0;
}
///////////////////////////////////
Node *myhead;
Node *p; //通过p来读取文件中的数据
Node *p2; //指向头结点来实现查找想要修改学生的数据
Node *p3; //指向修改后的链表的头结点,然后把数据重新写入到文件
Node *new;
myhead=NULL;
while(!feof(fp)) {
new =malloc(sizeof(Node));//新建一个结点用来从文件中读出数据形成链表
fscanf(fp, "%d %s %d %d\n",&new->stu.number,new->stu.name,&new->stu.age,&new->stu.score);
if (myhead==NULL) {//如果头结点为空,则先生成头结点
myhead = new;
p=myhead; //p指向最后一个结点,此时头结点就是最后一个结点
}else {
p->next=new; //把新结点给p,然后p指向下一个结点
p=p->next;
}
}
fclose(fp);
p2 = myhead;
while (p2!=NULL){//通过读出的链表来找到要修改信息的学生
if(p2->stu.number==student_num) {
printf("请输入学生的所要修改的信息:\n名字年龄 成绩 ");
//通过再次输入数据覆盖原来的数据
scanf(" %s %d %d",p2->stu.name,&p2->stu.age,&p2->stu.score);
fp2 = fopen("//Users//mac//Desktop//studentMMS.txt","w");
if (fp2==0) {
printf("打开文件失败");
return 0;
}
p3=myhead;
while (p3!=NULL) {//向文件中重新写入数据
fprintf(fp, "%d %s %d %d \n",p3->stu.number,p3->stu.name,p3->stu.age,p3->stu.score);
p3=p3->next;
}
if (p3==NULL) {
printf("修改成功!");
}
fclose(fp2);//关闭文件
break;
}
p2=p2->next;//p2指向下一个结点
}
if (p2==NULL) {
printf("没有该学生的信息!");
}
return 0;
}
- c实现学生成绩管理系统 MIS
- c用链表实现学生成绩管理系统 MIS
- 用Objective-C写学生成绩管理系统MIS
- 学生成绩管理系统 c语言实现
- C语言实现学生成绩管理系统
- C语言实现---学生成绩管理系统
- C语言实现学生成绩管理系统
- 学生成绩管理系统的初步实现(C)
- C语言实现学生成绩管理系统设计
- 学生成绩管理系统(C语言实现)
- 简易学生成绩管理系统(c++)
- 学生成绩管理系统-C
- 学生成绩管理系统(c++)
- C语言学生成绩管理系统
- 学生成绩管理系统【c】
- c链表 学生成绩管理系统
- C语言 学生成绩管理系统
- C语言--学生成绩管理系统
- 每天一个linux命令(31): /etc/group文件详解
- android通过URL路径下载安装文件
- libpng库的使用讲解
- android4.2 动态显示/隐藏导航栏
- 函数inet_addr和inet_ntoa-linux
- c实现学生成绩管理系统 MIS
- 每天一个linux命令(32):gzip命令
- 分布式发电相关
- 每天一个linux命令(33):df 命令
- 匿名类的实例监视窗口事件
- 每天一个linux命令(34):du 命令
- UILabel自动换行
- 每天一个linux命令(35):ln 命令
- UIViewController生命周期方法执行顺序