如何用c语言制作一个学生信息管理系统,要求以文件形式保存

Python011

如何用c语言制作一个学生信息管理系统,要求以文件形式保存,第1张

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//链表结点结构体声明

typedef struct subjects

{

char name[20]

float score

}sub

typedef struct student

{

int num

char name[20]

sub  subject[3]

struct student* next

}stu,*pstu

#define SIZE sizeof(stu)

//函数申明

pstu LoadInfo()

void PrintMenu()

pstu AddStu(pstu )

pstu DeleStu(pstu )

pstu RwrStu(pstu )

void FindStu(pstu , char )

void Count(pstu ,char * ,float ,float )

void Rank(pstu ,char * )

void SaveQuit(pstu )

//创建菜单,进入选择循环

while(1)

{

PrintMenu()

printf("请输入您的选择编号:")

scanf("%d",&n)

getchar()                   

switch(n)

{

case 1:

{

system("cls")           

j=0

while(4!=j)       

{

printf("欢迎进入信息管理版块!\n\n")

printf("\025 1、添加学生\n")

printf("\025 2、删除学生\n")

printf("\025 3、修改学生信息\n")

printf("\025 4、返回\n")

printf("请输入您的选择编号:\n")

scanf("%d",&j)

getchar()

if     ( 1 == j) head = AddStu(head)     

else if( 2 == j) head = DeleStu(head)   

else if( 3 == j) head = RwrStu(head)     

else if( 4 == j)

else printf("输入有误,请重新输入!\n")

}

case 2:

{

//信息查询

system("cls")

printf("欢迎进入信息查询版块!\n")

printf("请输入要查询的学生编号:")

scanf("%d",&j)

getchar()

//printf("%d\n",j)          //检测输入是否成功,调试程序用

FindStu(head,j)            //查询并输出

printf("\n请输入回车键返回主菜单!")

getchar()

system("cls")

break

}

扩展资料:

C语言包含的各种控制语句仅有9种,关键字也只有32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。

实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。

参考资料来源:百度百科-c语言

不灭王朝

码龄9年

关注

int menu(){

printf("请按提示输入完成操作!\n")

printf("1.查询员工信息\n")

printf("2.统计员工数量\n")

printf("3.录入员工信息\n")

printf("4.删除员工信息\n")

printf("5.按id排序所有员工\n")

printf("6.打印所有员工信息\n")

printf("7.退出系统\n")

return 0

}

如menu()函数所示,该系统一共有7个功能

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct emp{

int id

char name[50]

struct emp * next

// struct emp * prev

}

struct emp * initList()

struct emp * addListTailNode(struct emp * head)

struct emp * deleteListNode(struct emp * head,int id)

struct emp * searchEmp(struct emp * head,int id)

int printList(struct emp * l)

int printNode(struct emp * p)

struct emp * sortList(struct emp * head)

int getListLen(struct emp * head)

int writeToDisk(struct emp * head)

struct emp * readFromDisk()

int menu()

int usage(struct emp * head)

#include "emp.h"

int main(){

struct emp * head

head=readFromDisk()

usage(head)

return 0

}

struct emp * initList(){

struct emp * head

head=(struct emp *)malloc(sizeof(struct emp))

head->next=NULL

return head

}

struct emp * addListTailNode(struct emp * head){

int id

char name[50]

struct emp * p, * last , * check

last = head

while(last->next!=NULL){

last=last->next

}

printf("依次输入:员工id号,姓名!\n")

scanf("%d%s",&id,&name)

check = head

while(check!=last){ //遍历

check=check->next

if(id==check->id){

printf("添加失败!员工id号重复!\n")

return head

}

}

p=(struct emp *)malloc(sizeof(struct emp))

p->id=id

strcpy(p->name,name)

//

last->next=p

last=p

p->next=NULL

printf("%s员工信息已添加!\n",p->name)

return head

}

struct emp * deleteListNode(struct emp * head,int id){

struct emp * p,* q

p = head->next

while(p!=NULL){

if(p->next->id==id){

break

}

p=p->next

}

if(head->next==NULL){

printf("书籍信息为空!删除失败!\n")

}

else{

q = p->next

p->next = q->next

printf("%s书籍信息被删除!\n",q->name)

free(q)

}

return head

}

struct emp * searchEmp(struct emp * head,int id){//查询,返回节点信息

struct emp * p

p = head->next

while(p!=NULL){

if(p->id==id){

break

}

p=p->next

}

return p

}

int printNode(struct emp * p){//打印节点信息

if(p!=NULL){

printf("员工id: %d员工姓名:%s\n",p->id,p->name)

}

else{

printf("系统内无该员工信息!\n")

}

return 0

}

int printList(struct emp * head){ //打印整条链表

struct emp * p

p = head->next

while(p!=NULL){

printNode(p)

p=p->next

}

return 0

}

struct emp * sortList(struct emp * head){//排序

struct emp * p,* q

int temp_id

char temp_name[50]

for(p=head->nextp!=NULLp=p->next){

for(q=p->nextq!=NULLq=q->next){

if(p->id>q->id){

temp_id = q->id

q->id = p->id

p->id = temp_id

//

strcpy(temp_name,q->name)

strcpy(q->name,p->name)

strcpy(p->name,temp_name)

}

}

}

return head

}

int getListLen(struct emp * head){

int len=0

struct emp * p

p=head->next

while(p!=NULL){

len++

p=p->next

}

return len

}

int writeToDisk(struct emp * head){

FILE * fp

struct emp * p

if((fp = fopen("D:\\emp.hhtx", "w")) == 0){

printf("写入失败……!\n")

return 0

}

//

p=head->next

while(p!=NULL){

fwrite(p,sizeof(struct emp),1,fp)

printf("%d %s\n",p->id,p->name)

p=p->next

}

fclose(fp)

return 0

}

struct emp * readFromDisk(){

FILE * fp

struct emp * head,* last,* p,* temp

head = initList()

if((fp = fopen("D:\\emp.hhtx", "r")) == 0){

printf("加载失败……未找到存档数据!\n\n")

return head

}

//

last = head

p=(struct emp *)malloc(sizeof(struct emp))

while(p!=NULL){

p=(struct emp *)malloc(sizeof(struct emp))

fread(p,sizeof(struct emp),1,fp)

printf("读取数据: %d %s\n",p->id,p->name)

//

last->next=p

last=p

p=p->next

}

fclose(fp)

printf("系统数据初始化完成!")

return head

}

int menu(){

printf("请按提示输入完成操作!\n")

printf("1.查询员工信息\n")

printf("2.统计员工数量\n")

printf("3.录入员工信息\n")

printf("4.删除员工信息\n")

printf("5.按id排序所有员工\n")

printf("6.打印所有员工信息\n")

printf("7.退出系统\n")

return 0

}

int usage(struct emp * head){

int x,id

struct emp * p

menu()

while(1){

printf("请输入序列号:")

scanf("%d",&x)

switch(x){

case 1:

printf("输入所要查询的员工的id号:")

scanf("%d",&id)

p = searchEmp(head,id)

printNode(p)

printf("---------------------------------\n")

break

case 2:

printf("系统中一共存在%d个员工\n",getListLen(head))

break

case 3:

head=addListTailNode(head)

printf("---------------------------------\n")

break

case 4:

printf("输入所要删除的员工的id号:")

scanf("%d",&id)

head=deleteListNode(head,id)

printf("---------------------------------\n")

break

case 5:

printf("排序开始……\n")

head=sortList(head)

printf("排序已完成!\n")

printf("---------------------------------\n")

break

case 6:

printList(head)

printf("------

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

#include<string.h>

#define LEN sizeof(struct student)

#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"

#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum

struct student/*定义学生成绩结构体*/

{ int num/*学号*/

char name[15]/*姓名*/

double elec/*选修课*/

double expe/*实验课*/

double requ/*必修课*/

double sum/*总分*/

}

struct student stu[50]/*定义结构体数组*/

void in()/*录入学生成绩信息*/

void show()/*显示学生信息*/

void order()/*按总分排序*/

void del()/*删除学生成绩信息*/

void modify()/*修改学生成绩信息*/

void menu()/*主菜单*/

void insert()/*插入学生信息*/

void total()/*计算总人数*/

void search()/*查找学生信息*/

void save()/*保存函数*/

void open()/*打开函数*/

void main()/*主函数*/

{ int n

menu()

scanf("%d",&n)/*输入选择功能的编号*/

while(n)

{ switch(n)

{ case 1: in()break

case 2: search()break

case 3: del()break

case 4: modify()break

case 5: insert()break

case 6: order()break

case 7: total()break

case 8: save()break

case 9: open()break

default:break

}

getch()

menu()/*执行完功能再次显示菜单界面*/

scanf("%d",&n)

}

}

void in()/*录入学生信息*/

{ int i,m=0/*m是记录的条数*/

char ch[2]

FILE *fp/*定义文件指针*/

if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/

{ printf("无法打开\n")return}

while(!feof(fp)) {

if(fread(&stu[m] ,LEN,1,fp)==1)

m++/*统计当前记录条数*/

}

fclose(fp)

if(m==0)

printf("没有记录!\n")

else

{

system("cls")

show()/*调用show函数,显示原有信息*/

}

if((fp=fopen("data.txt","wb"))==NULL)

{ printf("无法打开\n")return}

for(i=0i<mi++) fwrite(&stu[i] ,LEN,1,fp)/*向指定的磁盘文件写入信息*/

printf("确认输入:(Y/N):")

scanf("%s",ch)

while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/

{

printf("学号:")scanf("%d",&stu[m].num)/*输入学生学号*/

for(i=0i<mi++)

if(stu[i].num==stu[m].num)

{

printf("学号存在,输入任意键继续!")

getch()

fclose(fp)

return

}

printf("姓名:")scanf("%s",stu[m].name)/*输入学生姓名*/

printf("选修课:")scanf("%lf",&stu[m].elec)/*输入选修课成绩*/

printf("实验课:")scanf("%lf",&stu[m].expe)/*输入实验课成绩*/

printf("必修课:")scanf("%lf",&stu[m].requ)/*输入必修课成绩*/

stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ/*计算出总成绩*/

if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/

{ printf("无法保存!")getch()}

else { printf("%s 保持成功!\n",stu[m].name)m++}

printf("继续?(Y/N):")/*询问是否继续*/

scanf("%s",ch)

}

fclose(fp)

printf("OK!\n")

}

void show()

{ FILE *fp

int i,m=0

fp=fopen("data.txt","rb")

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++

}

fclose(fp)

printf("学号姓名 选修课 实验课 必修课 总成绩\t\n")

for(i=0i<mi++)

{

printf(FORMAT,DATA)/*将信息按指定格式打印*/

}

}

void menu()/*自定义函数实现菜单功能*/

{

system("cls")

printf("\n\n\n\n\n")

printf("\t\t|-------------学生信息管理系统-----------by:zxl|\n")

printf("\t\t|\t 0. 退出|\n")

printf("\t\t|\t 1. 录入学生基本信息|\n")

printf("\t\t|\t 2. 寻找某位学生信息|\n")

printf("\t\t|\t 3. 删除学生基本信息|\n")

printf("\t\t|\t 4. 修改学生基本信息|\n")

printf("\t\t|\t 5. 插入新生基本信息|\n")

printf("\t\t|\t 6. 排序学生基本信息|\n")

printf("\t\t|\t 7. 浏览全班学生信息|\n")

printf("\t\t|\t 8. 保存学生信息到磁盘 |\n")

printf("\t\t|\t 9. 打开学生信息从磁盘 |\n")

printf("\t\t|-----------------------------------------------|\n\n")

printf("\t\t\t选择(0-9):")

}

void order()/*自定义排序函数*/

{ FILE *fp

struct student t

int i=0,j=0,m=0

if((fp=fopen("data.txt","r+"))==NULL)

{

printf("无法打开!\n")

return

}

while(!feof(fp))

if(fread(&stu[m] ,LEN,1,fp)==1)

m++

fclose(fp)

if(m==0)

{

printf("没有记录!\n")

return

}

if((fp=fopen("data.txt","wb"))==NULL)

{

printf("无法打开\n")

return}

for(i=0i<m-1i++)

for(j=i+1j<mj++)/*双重循环实现成绩比较并交换*/

if(stu[i].sum<stu[j].sum)

{ t=stu[i]stu[i]=stu[j]stu[j]=t}

if((fp=fopen("data.txt","wb"))==NULL)

{ printf("无法打开\n")return}

for(i=0i<mi++)/*将重新排好序的内容重新写入指定的磁盘文件中*/

if(fwrite(&stu[i] ,LEN,1,fp)!=1)

{

printf("%s 无法保存!\n")

getch()

}

fclose(fp)

printf("保存成功!")

getch()

}

void del()/*自定义删除函数*/

{FILE *fp

int snum,i,j,m=0

char ch[2]

if((fp=fopen("data.txt","r+"))==NULL)

{ printf("无法打开\n")return}

while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++

fclose(fp)

if(m==0)

{

printf("没有记录!\n")

return

}

printf("请输入学号:")

scanf("%d",&snum)

for(i=0i<mi++)

if(snum==stu[i].num)

break

printf("找到学号,删除?(Y/N)")

scanf("%s",ch)

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要进行删除*/

for(j=ij<mj++)

stu[j]=stu[j+1]/*将后一个记录移到前一个记录的位置*/

m--/*记录的总个数减1*/

if((fp=fopen("data.txt","wb"))==NULL)

{ printf("无法打开\n")return}

for(j=0j<mj++)/*将更改后的记录重新写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{ printf("无法保存!\n")

getch()}

fclose(fp)

printf("删除成功!\n")

getch()

}

void search()/*自定义查找函数*/

{ FILE *fp

int snum,i,m=0

char ch[2]

if((fp=fopen("data.txt","rb"))==NULL)

{ printf("无法打开\n")return}

while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++

fclose(fp)

if(m==0) {printf("没有记录!\n")return}

printf("请输入学号:")

scanf("%d",&snum)

for(i=0i<mi++)

if(snum==stu[i].num)/*查找输入的学号是否在记录中*/

{ printf("找到学号,显示?(Y/N)")

scanf("%s",ch)

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("学号姓名 选修课 实验课 必修课 总成绩\t\n")

printf(FORMAT,DATA)/*将查找出的结果按指定格式输出*/

getch()

}break

}

if(i==m) printf("无法找到该学生!\n")/*未找到要查找的信息*/

}

void modify()/*自定义修改函数*/

{ FILE *fp

int i,j,m=0,snum

if((fp=fopen("data.txt","r+"))==NULL)

{ printf("无法打开\n")return}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1) m++

if(m==0) {printf("无记录!\n")

fclose(fp)

return

}

printf("请输入您要修改信息的学生的学号!\n")

scanf("%d",&snum)

for(i=0i<mi++)

if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/

break

printf("找到学号,您可以修改!\n")

printf("姓名:")

scanf("%s",stu[i].name)/*输入名字*/

printf("选修课:")

scanf("%lf",&stu[i].elec)/*输入选修课成绩*/

printf("实验课:")

scanf("%lf",&stu[i].expe)/*输入实验课成绩*/

printf("必修课:")

scanf("%lf",&stu[i].requ)/*输入必修课成绩*/

stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ

if((fp=fopen("data.txt","wb"))==NULL)

{ printf("无法打开\n")return}

for(j=0j<mj++)/*将新修改的信息写入指定的磁盘文件中*/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{ printf("无法保存!")getch()}

fclose(fp)

printf("修改成功!")

getch()

}

void insert()/*自定义插入函数*/

{ FILE *fp

int i,j,k,m=0,snum

if((fp=fopen("data.txt","r+"))==NULL)

{ printf("无法打开\n")return}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1) m++

if(m==0) {printf("无记录!\n")

fclose(fp)

getch()

return

}

printf("输入要插入的位置(学号):")

scanf("%d",&snum)/*输入要插入的位置*/

for(i=0i<mi++)

if(snum==stu[i].num)

break

for(j=m-1j>ij--)

stu[j+1]=stu[j]/*从最后一条记录开始均向后移一位*/

printf("现在请输入新信息.\n")

printf("学号:")

scanf("%d",&stu[i+1].num)

for(k=0k<mk++)

if(stu[k].num==stu[i+1].num)

{

printf("学号存在,按任意键继续!")

getch()

fclose(fp)

return

}

printf("姓名:")

scanf("%s",stu[i+1].name)

printf("选修课:")

scanf("%lf",&stu[i+1].elec)

printf("实验课:")

scanf("%lf",&stu[i+1].expe)

printf("必修课:")

scanf("%lf",&stu[i+1].requ)

stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ

if((fp=fopen("data.txt","wb"))==NULL)

{ printf("无法打开\n")return}

for(k=0k<=mk++)

if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/

{ printf("无法保存!")getch()}

fclose(fp)

printf("插入成功!")

getch()

}

void total()

{ FILE *fp

int m=0

if((fp=fopen("data.txt","r+"))==NULL)

{ printf("无法打开\n")return}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++/*统计记录个数即学生个数*/

if(m==0) {printf("无记录!\n")fclose(fp)return}

printf("本班有%d个学生!\n",m)/*将统计的个数输出*/

show()

getch()

fclose(fp)

}

这个是成绩管理系统,可行?不过都差不多,课程设计这东西很简单的