学生管理系统:学习了一点文件指针的操作和链表操作,以前总想搞下子,刚好碰到同学要做这个,自己瞎搞了一通。

实现功能:数据添加,查找,删除,插入,修改只是在查找加几句就没写。

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
using namespace std; const int INF=0x3f3f3f3f;
const double eps=1e-;
const double PI=acos(-1.0);
#define maxn 500
#define LEN sizeof(struct student) struct student
{
char number[]; //学号
char name[]; //姓名
char sex[]; //性别
char classn[]; //班级
int score1; //数学分数
int score2; //英语分数
int score3; //计算机分数
struct student *next; //结构体指针
};
FILE *r;
FILE *w;
void Menu()//主菜单
{
system("cls");
printf("************学生成绩管理系统****************\n");
printf(" 1-文件读出学生信息\n");
printf(" 2-手动输入学生信息读入到文件\n");
printf(" 3-按学号查询学生信息\n");
printf(" 4-按学号删除学生信息\n");
printf(" 5-按学号从小到大插入学生信息\n");
printf(" 6-浏览显示全部学生成绩\n");
printf(" 0-退出\n");
printf("输入功能编号\n");
}
struct student *tail;
struct student *input()
{
struct student *head,*p1,*p2;
//开辟一个LEN大小的空间,并让p1,p2指针指向它
p2=p1=(struct student *)malloc(LEN);
//将头指针置为NULL
head=NULL;
//创建链表节点并给节点的元素赋值
//printf("请输入学生的学号和姓名:");
//while(~scanf("%ld %s",&p1->num,p1->name);
while(~fscanf(r,"%s%s%s%s%d%d%d",p1->number, p1->name, p1->sex, p1->classn, &p1->score1, &p1->score2, &p1->score3))
{
//n=n+1;
if(NULL==head)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
p1=(struct student *)malloc(LEN);
// printf("请输入学生的学号和姓名:");
// scanf("%ld %s",&p1->num,p1->name);
}
//将尾节点的指针置为NULL
p2->next=NULL;
tail = p2;
printf("从文件读出信息完毕\n");
printf("可以继续输入功能编号\n");
return head;
}
struct student * Add(struct student * head)
{
struct student *p1,*p2;
//开辟一个LEN大小的空间,并让p1,p2指针指向它
p2=p1=(struct student *)malloc(LEN); //创建链表节点并给节点的元素赋值
printf("添加学生编号,姓名,性别,班级,数学分数,英语分数,计算机分数\n");
printf("输入:2333 代表添加结束\n");
p2 = head; while()
{ scanf("%s",p1->number);
if(strcmp(p1->number,"") == )
break;
scanf("%s%s%s%d%d%d",p1->name,p1->sex,p1->classn,&p1->score1,&p1->score2,&p1->score3);
struct student *pp = p1;
if(NULL==head)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
p1=(struct student *)malloc(LEN);
fprintf(w,"%s %s %s %s %d %d %d\n",pp->number, pp->name, pp->sex, pp->classn, pp->score1, pp->score2, pp->score3);
}
//将尾节点的指针置为NULL
printf("添加信息到文件完毕\n");
printf("可以继续输入功能编号\n");
p2->next=NULL;
return head;
} void Serach(struct student * head)
{
struct student *p1,*p2;
p1=head;
printf("输入需要查询的学号");
char number[];
scanf("%s",number);
if(NULL==head)
{
printf("链表为空!\n");
return ;
}
//遍历节点,判断当前节点是不是需要删除的节点及是否为尾节点
//如果找到相应节点,或者已经遍历到尾节点就跳出循环
while(strcmp(p1->number,number) != &&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,number) == )
printf("%s%9s%5s%6s%9d%9d%9d\n",p1->number,p1->name,p1->sex, p1->classn, p1->score1, p1->score2, p1->score3);
else
printf("链表中没有要查询的元素.\n");
printf("可以继续输入功能编号\n");
} struct student * Delete(struct student * head)
{
struct student *p1;
struct student *p2;
p1=head;
//判断链表是否为空
printf("输入需要删除的学号");
char number[];
scanf("%s",number);
if(NULL==head)
{
printf("链表为空!\n");
return head;
}
//遍历节点,判断当前节点是不是需要删除的节点及是否为尾节点
//如果找到相应节点,或者已经遍历到尾节点就跳出循环
while(strcmp(p1->number,number)!=&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
//判断是否找到相应节点
if(strcmp(p1->number,number) == )
{
//要删除的节点是不是链表的第一个节点
//如果是,就将头指针指向该节点的后一个节点
//如果不是,就将该节点的前一个节点的指针指向该节点的后一个节点
if(head==p1)
{
head=p1->next;
}
else
{
p2->next=p1->next;
}
//n=n-1;
printf("%s 节点已删除.\n",number);
}
else
{
printf("链表中没有要删除的元素.\n");
}
printf("可以继续输入功能编号\n");
return head;
} struct student *Insert(struct student * head)
{
struct student *p0;
struct student *p1;
struct student *p2; p1=head;
//判断链表是否为空,如果是空链表,就将新节点作为第一个节点
printf("插入学生编号,姓名,性别,班级,数学分数,英语分数,计算机分数\n");
printf("输入:1333 代表插入结束\n");
while()
{
p0=(struct student *)malloc(LEN);
scanf("%s",p0->number);
if(strcmp(p0->number,"") == )
break;
scanf("%s%s%s%d%d%d",p0->name,p0->sex,p0->classn,&p0->score1,&p0->score2,&p0->score3);
if(NULL==head)
{
head=p0;
p0->next=NULL;
}
else
{
//遍历每一个节点中的学号,与新学号比较大小
//如果找到一个学号比新学号大,就将新学号的节点插入它之前
//如果尾节点的学号仍比新学号小,就将新节点插入到链表尾部
while(strcmp(p0->number,p1->number) > &&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
//找到一个比新学号大的节点
if(strcmp(p0->number, p1->number) <= )
{
//判断该节点是否为头节点,如果是,则将新节点设置为头节点
if(p1==head)
{
head=p0;
}
else
{
p2->next=p0;
}
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
printf("%s 插入成功!\n", p0->number);
}
printf("插入结束!\n");
printf("可以继续输入功能编号\n");
return head;
} void Print(struct student *head)
{
struct student * p;
p=head; //判断链表是否为空
if(NULL==head)
{
printf("链表为空!\n");
return ;
}
else
{
//循环打印链表中的元素
//printf("%d 个记录分别为:\n",n);
while(p!=NULL)
{
printf("%s %s\n",p->number,p->name);
//指针指向下一个节点
p=p->next;
}
}
printf("可以继续输入功能编号\n");
} int main()
{
Menu();
int num;
struct student *head =NULL;
struct student *stu;
tail = NULL;
while()
{
scanf("%d", &num);
Menu();
if(num == )
break;
switch(num)
{
case ://fopen("student.txt","r");//在根目录中
r = fopen("C:\\Users\\JONE\\Desktop\\student.txt", "r");
if (r==NULL) puts("null");
head = input();
fclose(r);
break;
case :
w = fopen("C:\\Users\\JONE\\Desktop\\myfile.txt", "w");
if(w==NULL) puts("null");
if(head == NULL)
head = Add(tail);
else
tail = Add(tail);
fclose(w);
break;
case :
Serach(head);
break;
case :
head = Delete(head);
break;
case :
head = Insert(head);
break;
case :
Print(head);
break;
}
}
return ;
}

学生管理系统(list)的更多相关文章

  1. 【IOS开发笔记02】学生管理系统

    端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...

  2. C程序范例(2)——学生管理系统”链表“实现

    1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...

  3. jsp学习之基于mvc学生管理系统的编写

    mvc开发模式:分别是 model层 view层 Control层 在学生管理系统中,model层有学生实体类,数据访问的dao层,view层主要是用于显示信息的界面,Control层主要是servl ...

  4. java版本的学生管理系统

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.awt.event.Ac ...

  5. 学生管理系统-火车订票系统 c语言课程设计

    概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描 ...

  6. Java学生管理系统项目案例

    这是一个不错的Java学生管理系统项目案例,希望能够帮到大家的学习吧. 分代码如下 package com.student.util; import java.sql.Connection; impo ...

  7. Java+Mysql+学生管理系统

    最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事.闲来无事,也就自己写了一个,不过功能实现的不是很多. 开发语言:java: 开发环境:Mysql, java: 开发工具 ...

  8. JDBC学生管理系统--处理分页显示

    分页的思想: 假设一共有104条数据,每页显示10条数据: select * from student limit 0,10; 页数是index,第index页,对应的sql语句是: select * ...

  9. JDBC-简单的学生管理系统-增删改查

    结构:三层架构--mvc 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑. 比如将数据库操作代码封装到一层中,提供一些方法根据参数直 ...

  10. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

随机推荐

  1. Windows下AndroidStudio 中使用Git(AndroidStudio项目于GitHub关联)

    前提条件 : 1. 安装 Git 客户端 下载链接 2. 有 GitHub 账号 (假设你已经有了一些git基础, 如果还一点都不会, 请去找其他加成学习) AndroidStudio项目发布到Git ...

  2. Roman to Integer && Integer to Roman 解答

    Roman Numeral Chart V:5 X:10 L:50 C:100 D:500 M:1000 规则: 1. 重复次数表示该数的倍数2. 右加左减:较大的罗马数字右边记上较小的罗马数字,表示 ...

  3. sprig——jar包

    Struts. Hibernate.Spring这类的框架给我们开发带来非常大的好处,让我们更加快速.有效的开发.所以我们在开发中通常都会用到各种框架,每个框架 都有很多jar包,每个jar都有各自不 ...

  4. UIView属性clipsTobounds的应用

    view添加view,并剪边(UIView属性clipsTobounds的应用) 如题,有两个view: view1,view2 view1添加view2到其中,如果view2大于view1,或者vi ...

  5. gcc基本用法

    GCC基本用法 GCC最基本的用法是: gcc [option] filenames option:编译器所需要的编译选项 filenames:要编译的文件名 gcc编译流程 都以 hello.c 为 ...

  6. HTML中将背景颜色渐变

    通过使用 css3 渐变可以让背景两个或多个指定的颜色之间显示平稳的过渡,由于用到css3所以需要考虑下浏览器兼容问题,例如:从左到右的线性渐变,且带有透明度的样式:#grad {background ...

  7. lucene评分推导公式

    在进行Lucene的搜索过程解析之前,有必要单独的一张把Lucene score公式的推导,各部分的意义阐述一下.因为Lucene的搜索过程,很重要的一个步骤就是逐步的计算各部分的分数. Lucene ...

  8. 1203.2——条件语句 之 switch语句

    用 if else 语句在处理多分支的时候,分支太多就会显得不方便,且容易出现 if 和 else配对出现错误的情况.例如,输入一个整数,输出该整数对应的星期几的英文表示: #include < ...

  9. 自定义UIView动画效果

    最普通动画: //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UIView setAnimationDuration:]; / ...

  10. C#获取QQ旋风的下载记录

    /* * 用户:从前的我 * 日期:2015/8/26 */ using System; using System.IO; namespace GetXf { class Program { publ ...