学生成绩管理系统 汇编语言
- 格式:docx
- 大小:26.95 KB
- 文档页数:19
*题目七:学生成绩管理系统设计学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)等。
主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩,求学生的总分及平均分(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单要求:使用二进制文件方式存储数据,系统以菜单方式工作源代码:#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>struct Student{int cls;char nam[10];char num[10];int chinese;int english;int computer;int math;}stud1[100],stud2[100];{char a;while(a>'7'||a<'0'){system("cls");printf(" 欢迎使用学生成绩管理系统\n");printf(" 制作人:章建\n");printf("********************** 学生成绩管理系统************************\n");printf(" 1.输入学生成绩\n");printf(" 2.输出学生成绩\n");printf(" 3.查找并显示学生成绩\n");printf(" 4.按姓名查找,修改学生资料\n");printf(" 5.显示所有学生名单\n");printf(" 6.查找并删除学生信息\n");printf(" 7.从文件读取数据\n");printf(" 0.储存学生资料并退出系统\n");printf("********************************************************************* *\n");printf("请选择(0-7)\n");a=getchar();}return(a-'0');}/******************************************************************************int Input(Student stud[],int n) //输入数据(第一学期)。
一、课程设计题目:学生成绩管理二、需求分析给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。
对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。
三、概要设计程序要有的功能:1。
输入记录2。
用指定格式显示全部记录3。
根据姓名查找记录4。
根据姓名删除记录5. 保存记录到文件6。
按序号显示记录7。
按姓名由小到大的顺序排序程序运行当中,通过选择对应的功能序号来实现所需功能。
对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。
再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。
在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。
最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。
与及格成绩作比较,输出及格人数等相关信息。
流程图:四、详细设计源程序:#include ”stdio。
h”#include "stdlib.h”#include "string。
h”int shoudsave=0;/* */struct student{char num[10];/*学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/*最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf(”*********************************主菜单*****************************************”);printf(”\t1登记学生资料\t\t\t\t\t2删除学生资料\n”);printf(”\t3查询学生资料\t\t\t\t\t4修改学生资料\n”);printf(”\t5保存学生资料\t\t\t\t\t0退出系统\n”);printf(”********************************************************************************\n");}void printstart(){printf(”-————---—-——————--——----———-—-—-————--————--—--—--—-————---—-—————--———\n”);}void Wrong(){printf(”\n=====>提示:输入错误!\n”);}void Nofind(){printf("\n=====〉提示:没有找到该学生!\n");}void printc()/*本函数用于输出中文*/printf(”学号\t 姓名性别英语成绩数学成绩C语言成绩总分平均分\n”); }void printe(Node *p)/* 本函数用于输出英文*/{printf("%—12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p—〉data。
python超详细实现完整学⽣成绩管理系统⽬录学⽣成绩管理系统简介源代码students.txtmain.pyLogin.pydb.pyMenuPage.pyview.py学⽣成绩管理系统简介⼀个带有登录界⾯具有增减改查功能的学⽣成绩管理系统(⾯向对象思想,利⽤tkinter库进⾏制作,利⽤.txt⽂件进⾏存储数据)源代码仅供学习参考,最好还是⾃⼰多敲多练习(实践是检验真理的唯⼀标准) students.txt⽤于存储数据main.pyfrom tkinter import *from Login import *import tkinter as tkroot = ()root.title('欢迎进⼊学⽣成绩管理系统')LoginPage(root)root.mainloop()Login.pyfrom tkinter import *from tkinter.messagebox import *from MenuPage import *class LoginPage(object):def __init__(self, master=None):self.root = master # 定义内部变量rootself.root.geometry('%dx%d' % (300, 180)) # 设置窗⼝⼤⼩ername = StringVar()self.password = StringVar()self.createPage()def createPage(self):self.page = Frame(self.root) # 创建Frameself.page.pack()Label(self.page).grid(row=0, stick=W)Label(self.page, text='账户: ').grid(row=1, stick=W, pady=10)Entry(self.page, textvariable=ername).grid(row=1, column=1, stick=E)Label(self.page, text='密码: ').grid(row=2, stick=W, pady=10)Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E) Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, stick=W, pady=10) Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=1, stick=E) def loginCheck(self):name = ername.get()password = self.password.get()if name == 'hacker707' and password == 'admin':self.page.destroy()MenuPage(self.root)else:showinfo(title='错误', message='账号或密码错误!')db.pyimport jsonclass StudentDB(object):def __init__(self):self.students = []self._load_students_data()def insert(self, student):self.students.append(student)print(self.students)def all(self):return self.studentsdef delete_by_name(self, name): # 删除数据for student in self.students:if name == student["name"]:self.students.remove(student)breakelse:return Falsereturn True# 查询def search_by_name(self, name):for student in self.students:if name == student["name"]:return student # 姓名+成绩else:return False# 修改def update(self, stu): # 修改数据name = stu["name"]for student in self.students:if name == student["name"]:student.update(stu)return Trueelse:return False# 加载⽂件def _load_students_data(self):with open("students.txt", "r", encoding="utf-8") as f:text = f.read()if text:self.students = json.loads(text)# 保存数据def save_data(self):with open("students.txt", 'w', encoding="utf-8") as f:text = json.dumps(self.students, ensure_ascii=False)f.write(text)db = StudentDB()MenuPage.pyimport tkinter as tkfrom view import *class MenuPage(object):def __init__(self, master=None):self.root = masterself.root.geometry('%dx%d' % (600, 400))self.create_page()self.input_page = InputFrame(self.root)self.query_page = QuerryFrame(self.root)self.delete_page = DeleteFrame(self.root)self.update_page = UpdateFrame(self.root)self.about_page = AboutFrame(self.root)self.input_page.pack()def create_page(self):# 创建菜单对象menubar = tk.Menu(self.root)# add_command 添加menubar.add_command(label="录⼊", command=self.input_data) # label menubar.add_command(label="查询", command=self.query_data) # label menubar.add_command(label="删除", command=self.delete_data) # label menubar.add_command(label="修改", command=self.update_data) # label menubar.add_command(label="关于", command=self.about_data) # label # 设置菜单栏self.root.config(menu=menubar)# 切换界⾯def input_data(self):self.input_page.pack()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack_forget()self.query_page.pack_forget()def query_data(self):self.input_page.pack_forget()self.query_page.pack()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack_forget()def update_data(self):self.input_page.pack_forget()self.update_page.pack()self.delete_page.pack_forget()self.about_page.pack_forget()self.query_page.pack_forget()def delete_data(self):self.input_page.pack_forget()self.update_page.pack_forget()self.delete_page.pack()self.about_page.pack_forget()self.query_page.pack_forget()def about_data(self):self.input_page.pack_forget()self.update_page.pack_forget()self.delete_page.pack_forget()self.about_page.pack()self.query_page.pack_forget()view.pyimport tkinter as tkfrom db import dbfrom tkinter import ttk# 录⼊类class InputFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)self.root = master = tk.StringVar()self.math = tk.StringVar()self.chinese = tk.StringVar()self.english = tk.StringVar()self.status = tk.StringVar()self.create_page()def create_page(self):bel(self).grid(row=0, stick=tk.W, pady=10)bel(self, text="姓名:").grid(row=1, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self, textvariable=).grid(row=1, column=1, stick=tk.E)bel(self, text="数学:").grid(row=2, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self, textvariable=self.math).grid(row=2, column=1, stick=tk.E)bel(self, text="语⽂:").grid(row=3, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)bel(self, text="英语:").grid(row=4, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self, textvariable=self.english).grid(row=4, column=1, stick=tk.E)tk.Button(self, text="录⼊", command=self.recode_student).grid(row=5, column=1, stick=tk.E, pady=10) bel(self, textvariable=self.status).grid(row=6, column=1, stick=tk.E, pady=10)# 录⼊成绩def recode_student(self):student = {"name": .get(),"math": self.math.get(),"chinese": self.chinese.get(),"english": self.english.get(),} # ⼀个学⽣的成绩db.insert(student)# get()得到值# set()设置值self.status.set("插⼊数据成功!")self._clear_data()db.save_data()# 清空⽂本数据def _clear_data(self):.set("")self.math.set("")self.chinese.set("")self.english.set("")# 查询类class QuerryFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)self.root = masterself.create_page()# 创建查询界⾯def create_page(self):self.create_tree_view()self.show_data_frame()# grid()tk.Button(self, text="刷新数据", command=self.show_data_frame).pack(anchor=tk.E, pady=5) # Treeviewdef create_tree_view(self):# 表头columns = ("name", "chinese", "math", "english")self.tree_view = ttk.Treeview(self, show='headings', columns=columns)self.tree_view.column("name", width=80, anchor='center')self.tree_view.column("chinese", width=80, anchor='center')self.tree_view.column("math", width=80, anchor='center')self.tree_view.column("english", width=80, anchor='center')self.tree_view.heading("name", text='姓名')self.tree_view.heading("chinese", text='语⽂')self.tree_view.heading("math", text='数学')self.tree_view.heading("english", text='英语')self.tree_view.pack()# 显⽰数据def show_data_frame(self):# 删除原节点 map(int,值)for i in map(self.tree_view.delete, self.tree_view.get_children("")):pass# 拿到列表⾥⾯所有值、students[]students = db.all()# 同时拿到索引跟value值for index, stu in enumerate(students):self.tree_view.insert('', index, values=(stu["name"], stu["chinese"], stu["math"], stu["english"]))class DeleteFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)bel(self, text='删除数据').pack()self.status = tk.StringVar()self.de_name = tk.StringVar() # 获取删除学⽣的姓名self.create_page()# 创建界⾯def create_page(self):bel(self, text="根据姓名删除信息").pack(anchor=tk.W, padx=20)e1 = tk.Entry(self, textvariable=self.de_name)e1.pack(side=tk.LEFT, padx=20, pady=5)tk.Button(self, text='删除', command=self._delete).pack(side=tk.RIGHT)bel(self, textvariable=self.status).pack()# 删除def _delete(self):name = self.de_name.get()print(name)result = db.delete_by_name(name)if result:self.status.set(f'{name}已经被删')self.de_name.set("")else:self.status.set(f'{name}不存在')class UpdateFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)self.root = masterbel(self, text='修改界⾯').pack()self.change_frame = tk.Frame(self)self.change_frame.pack() = tk.StringVar()self.math = tk.StringVar()self.chinese = tk.StringVar()self.english = tk.StringVar()self.status = tk.StringVar()self.create_page()def create_page(self):bel(self.change_frame).grid(row=0, stick=tk.W, pady=10)bel(self.change_frame, text="姓名:").grid(row=1, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self.change_frame, textvariable=).grid(row=1, column=1, stick=tk.E)bel(self.change_frame, text="数学:").grid(row=2, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self.change_frame, textvariable=self.math).grid(row=2, column=1, stick=tk.E)bel(self.change_frame, text="语⽂:").grid(row=3, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self.change_frame, textvariable=self.chinese).grid(row=3, column=1, stick=tk.E)bel(self.change_frame, text="英语:").grid(row=4, stick=tk.W, pady=10)# 单⾏⽂本框 entry,textvariable绑定变量tk.Entry(self.change_frame, textvariable=self.english).grid(row=4, column=1, stick=tk.E)# 按钮tk.Button(self.change_frame, text='查询', command=self._search).grid(row=6, column=0, stick=tk.W, pady=10) tk.Button(self.change_frame, text='修改', command=self._change).grid(row=6, column=1, stick=tk.E, pady=10) bel(self.change_frame, textvariable=self.status).grid(row=7, column=1, stick=tk.E, pady=10)# 查询def _search(self):name = .get()student = db.search_by_name(name)if student:self.math.set(student["math"])self.chinese.set(student["chinese"])self.english.set(student["english"])self.status.set(f'查询到{name}同学的信息')else:self.status.set(f'没有查询到{name}同学的信息')# 更改成绩def _change(self):name = .get()math = self.math.get()chinese = self.chinese.get()english = self.english.get()stu = {"name": name,"math": math,"chinese": chinese,"english": english,}r = db.update(stu)if r:self.status.set(f"{name}同学的信息更新完毕")else:self.status.set(f"{name}同学的信息更新失败")class AboutFrame(tk.Frame):def __init__(self, master=None):super().__init__(master)self.root = masterself.create_page()def create_page(self):bel(self, text="关于本作品(⼈⽣苦短,我⽤python)").pack(anchor=tk.W)以上就是使⽤python实现学⽣成绩管理系统,如果有改进的建议,欢迎在评论区留⾔奥~这篇⽂章参加了csdn的活动,还请⼤家多多三连⽀持⼀下博主,你们的⽀持就是我创作的动⼒到此这篇关于python超详细实现完整学⽣成绩管理系统的⽂章就介绍到这了,更多相关python 学⽣成绩管理系统内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",#switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。
目录——学生成绩管理程序题目要求 (2)设计目的 (2)总体设计 (3)详细设计 (3)调试与测试 (12)源程序 (14)总结 (30)学生成绩管理程序一.题目要求1.问题描述:对在校学生几门课程的考试成绩进行统一管理.每个学生记录包括学号,姓名,年龄,数学,英语,物理成绩,默认以学号为序存放.2.要求:(1)一个文件按以班为单位存储学生记录.(2)将允许的操作分为四种,以A,B ,C,D,E,F为标志:A:插入一个学生记录;B:修改学生记录;C:删除一个学生记录;D:查找一个学生记录;E:浏览学生成绩:F:退出3.计算学生的总成绩.4.按学号排序输出全班学生成绩表.二.设计目的根据题目要求,由于学生信息是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择.三.总体设计根据上面的需求分析,可以将这个系统分为以下模块:输入模块,修改模块,删除模块,查找模块,显示模块.学生成绩管理系统数据输入数据显示数据修改数据删除数据查找四.详细设计1.主函数:主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择.流程图:显示一系列功能模块N输入n,判断n是否是A--FY根据n的值调用各功能模块函数[程序]://#include "head.h"int menu_select(){char c;printf("\n\n");printf(" | 1. 增加学生记录 5.统计信息 |\n");printf(" | 2. 查询学生记录 6.打开文件 |\n");printf(" | 3. 修改学生记录 7.保存文件 |\n");printf(" | 4. 学生纪录排序 8.显示记录 |\n");printf(" | 0. 退出系统 |\n");printf("\n\n");printf("请选择(0-8):");c=getchar();getchar();return (c-'0');}2.输入模块:[分析]:单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;分数为整数,采用整数;数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.如果要存放若干学生信息就用结构体数组:void addrecord(student stud[]){int i=0,j,num;char str[5];if(numstus!=0){printf("已有记录存在是否覆盖?(y/n)\n");gets(str);if(str[0]=='Y'||str[0]=='y')i=0;else i=numstus;}printf("请输入增加的学生信息条目数:");scanf("%d",&num);if(i==0)numstus=num;else numstus+=num;if(numstus>lens){lens+=50;pointer=(student *)realloc(pointer,lens*LEN);}printf("请输入学生信息:\n");for(;i<numstus;i++){getchar();printf("请输入学号:");gets(pointer[i].number);printf("请输入姓名:");gets(pointer[i].name);printf("请输入性别(男/女 1/0):");gets(pointer[i].sex);if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");else strcpy(pointer[i].sex,"男");printf("请输入各科成绩:(按“语文,数学,英语,历史,政治”的顺序):"); stud[i].score=0;for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]); /*计算总分*/stud[i].score+=stud[i].subject[j];}stud[i].average=stud[i].score/numsubs; /*计算平均分*/}count(stud); /*附名次*/display(stud,0,numstus-1);getchar();}int numstus;int lens;student *pointer;void main(){int i=1;char str[2];lens=100;pointer=(student *)malloc(lens*LEN); /*分配内存*/numstus=0;welcome(); /*欢迎界面*/while(i>0){i=menu_select(); /*控制菜单*/switch(i){case 1:addrecord(pointer);break; /*增加学生信息*/case 2:findrecord(pointer);break; /*查询学生信息*/case 3:amendrecord(pointer);break; /*修改学生信息*/case 4:sort(pointer);break; /*学生信息排序*/case 5:statistic(pointer);break; /*统计信息*/case 6:openfile(pointer);break; /*打开文件*/case 7:writetotext(pointer);break; /*保存文件*/case 8:display(pointer,0,numstus-1);break; /*显示记录*/case 0:if(numstus!=0) printf("是否保存当前记录?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(pointer);i=-1;break; /*退出系统*/default:printf("请输入数字0~8:\n");i=1; /*输入错误*/}}printf("\t\t 欢迎再次使用本系统。
#include ”stdio.h”#include ”string.h”#include "stdlib.h"#include "conio.h"#include ”string.h”#include "fcntl。
h"typedef struct student{int num;char grade[10];char classroom[10];char name[10];float score_math;float score_chinese;float score_english;float average;float sum;}STU;typedef struct Node{STU data;struct Node *next;}*linklist;void menu();char *loginpassword(char password[],int n);//登录验证密码函数声明//linklist createstulist(linklist head);//创建学生链表即学生信息录入函数声明// void printstulist(linklist head);//学生信息输出函数声明//void searchstu_namelist(linklist head);//学生信息查询函数声明(按姓名)// void searchstu_numlist(linklist head);//学生信息查询函数声明(按学号) linklist modifystulist(linklist head);//学生信息修改函数声明//linklist delatestulist(linklist head);//学生信息删除函数声明//void savestulist(linklist head);//学生信息保存到文件函数声明// linklist loadstulist();//从文件中读取学生信息函数声明// void sortstulist(linklist head); //成绩排名函数(按年级)声明//void sort(STU stu[],int flag); //学生分班函数声明//void sortstuclass(linklist head); //成绩排名函数(按班级)声明////*************************************//void main(){char admin[]=”zhangqiong";char password[]=”123456";char person[20];char password1[10];int i;printf(”********************************************************************************\n”);printf("\t\t **********欢迎来到学生成绩管理系统**********\n\n");printf(”********************************************************************************\n\n”);printf(”\t\t\t\t用户登录\n\n\n\n");for(i=0;i<3;i++){printf("用户名:”);gets(person);fflush(stdin);printf(”\n\n\n”);loginpassword(password1,10);printf("\n\n\n”);if(strcmp(admin,person)==0&&strcmp(password,password1)==0){printf(”\t\t\t\t成功登录,亲!\n”);printf("\n\n”);printf(”按任意键继续!”);getch();menu();break;}elseprintf("\t用户名或者密码输入错误\n”);}if(i==3)printf("\t对不起,您今天输入次数太多,已被强制退出!\n”);}//**********************************************************////**********************************************************//char *loginpassword(char password[],int n)//登录密码函数,隐藏密码可见//{int i=0;int m=0;char ch;printf("用户密码:”);while((ch=getch())!='\r’&&m〈n){password[i++]=ch;printf(”*");}password[i]='\0';return password;}//***************************************************// void menu()//主界面函数//{system("cls");linklist L;L=(linklist)malloc(sizeof(Node));L—>next=NULL;int ch;do{printf(”\t -——-----—-******——--——--—---******—————-————-******-—-—-—-—-—\n\n");printf("\t\t\t**********学生成绩管理系统***********\n\n”);printf("\t ——----——--******-—-——------—******—---———--—-******—---———-——\n\n\n\n\n");printf("\t1。
C语言学生成绩管理系统总结简介学生成绩管理是学校管理系统中一个重要的模块,它负责对学生的各类成绩进行管理和统计。
C语言作为一门通用的编程语言,被广泛应用于学生成绩管理系统的开发中。
本文将对C语言学生成绩管理系统的开发和总结进行详细介绍。
开发目标C语言学生成绩管理系统的开发目标是实现学生的成绩管理和统计,通过该系统可以进行成绩录入、查询和统计等功能。
系统需要提供友好的用户界面,并能够有效地处理大量的学生数据。
主要功能C语言学生成绩管理系统主要包含以下功能:1.成绩录入:通过输入学生的基本信息和成绩,将其保存到系统数据库中。
2.成绩查询:根据学生的学号、姓名等关键信息进行查询,可以快速地找到所需的成绩记录。
3.成绩统计:对学生的成绩进行统计,包括总分、平均分、最高分、最低分等。
4.成绩排序:对学生的成绩进行排序,可以按照总分、班级排名等进行排序。
5.成绩报告:根据学生的成绩数据生成成绩报告,包括学生的基本信息和各科成绩。
6.数据备份:将学生的成绩数据进行备份,以防止数据丢失。
技术实现C语言学生成绩管理系统的开发需要借助以下技术:1.结构体:使用结构体来存储学生的基本信息和成绩数据,方便对学生数据进行管理和操作。
2.文件操作:通过文件操作实现学生信息和成绩的读写,将数据保存到文件中以便后续的查询和统计。
3.排序算法:使用排序算法对学生的成绩进行排序,常用的排序算法包括冒泡排序、插入排序、选择排序等。
4.统计函数:编写统计函数来计算学生成绩的总分、平均分、最高分、最低分等统计指标。
开发总结在开发C语言学生成绩管理系统的过程中,我获得了以下经验和总结:1.细化需求:在开始开发之前,需要先明确系统的需求,包括功能需求和性能需求等。
细化需求对于开发过程的顺利进行非常重要。
2.模块化设计:将系统划分为多个模块,每个模块负责一个具体的功能。
模块化设计可以提高代码的重用性和可维护性。
3.错误处理:在开发过程中要考虑各种可能出现的错误,并进行相应的错误处理。
学生成绩管理系统源代码#include<stdio.h>#include<stdlib.h>int main(){typedef struct LNode{char name[6];int no;int yw;int sx;int yy;struct LNode *next;}LinkList;struct NameNo{int no;int yw;int sx;int total;char name[6];}st[10];FILE *fp,*fp1;char ch,sname[6];int x,i,j;NameNo tmp;LinkList *p,*s;printf("\n");printf("-------------------------------");printf("学生成绩管理系统");printf("--------------------------------");printf("\n\n");printf("在您的C盘根目录下是否有cj1.txt和cj2.txt文件?如果有请输入,1");printf("否则输入0;如果没有,那么程序将终止!1 or 0?");scanf("%d",&i);if(i==0) return 0;printf("\n\n");printf("对cj1.txt和cj2.txt进行合成请按‘1’");scanf("%d",&i);if(i!=1) return 0;printf("正在把cj1.txt和cj2.txt中的数据进行合并\n");printf("......\n.....\n....\n...\n..\n.\n");if((fp=fopen("c:\\cj1.txt","rt"))==NULL){printf("无cj1.txt文本文件,程序结束。
学生成绩管理系统的设计与实现代码本系统有增加学生记录、修改学生记录、删除学生记录、按姓名查询学生记录、按C语言成绩对学生进行排序、退出系统6大功能。
能够对学生的姓名,学号,c语言成绩做相应的操作。
在检测到输入成绩大于55时,会自动加上5。
该管理系统设计功能模块图:下面是源代码:#include "stdio.h"#include "string.h"/*定义学生结构体*/struct Student{char ID[20]; //学号char Name[20]; //姓名float C_Mark; //C语言成绩};/*声明学生数组及学生数量*/struct Student students[1000];int num=0;/*通过学号返回数组下标*/int Student_SearchByIndex(char id[]) {int i;for (i=0;i<num;i++){if (strcmp(students[i].ID,id)==0) {return i;}}return -1;}/*通过姓名返回数组下标*/int Student_SearchByName(char name[]) {int i;for (i=0;i<num;i++){if (strcmp(students[i].Name,name)==0){return i;}}return -1;}/*显示单条学生记录*/void Student_DisplaySingle(int index){printf("%10s%10s%8s\n","学号","姓名","C语言成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f\n",students[index].ID,students[index] .Name,students[index].C_Mark);}/****1、增加学生记录*****/void Student_Insert(){while(1){printf("请输入学号:");scanf("%s",&students[num].ID);getchar();printf("请输入姓名:");scanf("%s",&students[num].Name);getchar();printf("请输入C语言成绩:");scanf("%f",&students[num].C_Mark);getchar();if (54<students[num].C_Mark && students[num].C_Mark< 60) //把55~59分之间的成绩都加上5分{students[num].C_Mark += 5;}num++;printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/******2、修改学生信息**********/void Student_Modify(){while(1){char id[20];int index;printf("请输入要修改的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if (index==-1){printf("该学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("-- 请输入新值--\n");printf("请输入学号:");scanf("%s",&students[index].ID);getchar();printf("请输入姓名:");scanf("%s",&students[index].Name);getchar();printf("请输入C语言成绩:");scanf("%f",&students[index].C_Mark);getchar();}printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/****3、删除学生信息****/void Student_Delete(){int i;while(1){char id[20];int index;printf("请输入要删除的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if (index==-1){printf("学生不存在!\n");}else{printf("你要删除的学生信息为:\n");Student_DisplaySingle(index);printf("是否真的要删除?(Y/N)");if (getchar()=='Y'){for (i=index;i<num-1;i++){students[i]=students[i+1];//把后边的对象都向前移动}num--;}getchar();printf("已删除\n");}printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/****4、按姓名查询******/void Student_Select(){while(1){char name[20];int index;printf("请输入要查询的学生的姓名:");scanf("%s",&name);getchar();index=Student_SearchByName(name);if (index==-1){printf("学生不存在!\n");}else{printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(Y/N),继续请按任意键,否则输入N:");if (getchar()=='N'){break;}}}/******5、按C语言成绩排序*******/void Student_SortByAverage(){int i,j;struct Student tmp;for (i=0;i<num;i++){for (j=1;j<num-i;j++){if (students[j-1].C_Mark<students[j].C_Mark){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*显示学生信息*/void Student_Display(){int i;printf("%10s%10s%8s\n","学号","姓名","成绩");printf("-------------------------------------------------------------\n");for (i=0;i<num;i++){printf("%10s%10s%8.2f\n",students[i].ID,students[i].Name ,students[i].C_Mark);}}/*将学生信息从文件(Database.txt)中读出*/void IO_ReadInfo(){FILE *fp;int i;if ((fp=fopen("Database.txt","rb"))==NULL){printf("不能打开文件!\n");return;}if (fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(struct Student),1,fp);}}fclose(fp);}/*将学生信息写入文件(Database.txt)*/void IO_WriteInfo(){FILE *fp;int i;if ((fp=fopen("Database.txt","wb"))==NULL){printf("不能打开文件!\n");return;}if (fwrite(&num,sizeof(int),1,fp)!=1){printf("写入文件错误!\n");}for (i=0;i<num;i++){if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1){printf("写入文件错误!\n");}}fclose(fp);}/***********主程序*********/void main(){int choice;IO_ReadInfo(); //读取文件while(1){/*主菜单*/printf("\n------ 学生成绩管理系统------\n");printf("1. 增加学生记录\n");printf("2. 修改学生记录\n");printf("3. 删除学生记录\n");printf("4. 按姓名查询学生记录\n");printf("5. 按C语言成绩排序\n");printf("6. 退出\n");printf("请选择(1-6):");scanf("%d",&choice);getchar();switch(choice){case 1:Student_Insert();break;case 2:Student_Modify();break;case 3:Student_Delete();break;case 4:Student_Select();break;case 5:Student_SortByAverage();Student_Display();break;case 6:exit(0);break;}IO_WriteInfo();}}1234567891011121415161718192021222324252627282930313233343637383940414243444546474849505152535455565859606162636465666768697071727374757677788081828384858687888990919293949596979899 100102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320322323324325326327328329330331332333334335336337338运行结果:测试第一个功能,输入四个学生的成绩:测试第二个功能,修改学生记录:测试第三个功能,删除学生记录:测试第四个功能,按姓名查询学生记录:测试第五个功能,显示所有学生的成绩,按照C语言成绩由高到底排序:我们可以看到,各项功能的实现,在第2个步骤中,将赵的成绩改为80,而第3个步骤删除了李的成绩。
面向对象程序设计实训报告(题目5)学生成绩管理系统设计]学院:_____ __ _____ _____专业名称:_________ _________班级:____________________学号:___________________学生姓名:___________________指导老师:__ ________________日期:_____ _________(一、基本功能描述本课程设计要求的几个功能在程序里面都能实现,有学生信息的输入、排序、修改、删除、查询、添加、退出等。
根据用户的需求来执行程序。
学生信息输入负责将学生的信息存储到对应的文本文件中,对学生的信息就包括按学分排序。
删除就负责对学生信息的删除。
查询可通过学号或姓名查询。
进入主菜单有函数main();实现。
里面有七个功能供其选择。
菜单一:信息录入功能,输入选项一进入该功能,根据系统提示输入相应的数据。
菜单二:为学生信息查询功能,当用户选择第二个功能后可以按学号或姓名查询。
菜单三:为删除学生信息功能,一般删除学生信息的时候是非常小心的,故当用户选择该功能后为了防止误删,只有按学号查找出要删除信息的同学的信息进行删除操作。
~菜单四:为修改学生信息功能,用户在主菜单里面可选择此功能,进入功能后,输入要修改学生的学号,然后选择提示用户要修改的项目(基本信息和成绩信息),当用户选择完毕后,直接输入新的数据即可。
菜单五:为排序学生信息,该功能是对学生成绩进行排序,是按学生总分进行排序。
菜单零:是退出系统,用户选择该功能后,退出系统,程序停止运行。
二、设计思路设计结构简图:三、程序实现,1. 设计过程总体设计方案:程序描述:1.建立一个主页面2.用switch语句进行分类讨论3.分别进行录入,查询,删除,修改,求平均值等子函数4.镜子函数与主函数相连即可】该程序可以建立学生的成绩记录。
可以方便老师和同学方便的查阅成绩。
本程序有录入和删除的功能,还可以求出平均成绩,并排序。
;==学生成绩管理系统==;******************************************************************************* ;EQU STATEMENTS GO HEREStructNode equ 32 ;表达式赋值微操作equ page133Node_name equ 0 ;类似defineNode_num equ 12Node_maths equ 18Node_english equ 20Node_chinese equ 22Node_others equ 24Node_total equ 26Node_avg equ 28Node_next equ 30max_record equ 100max_menu_index equ 9;*******************************************************************************;******************************************************************************* data_seg segment ;define data segment;DATA GOES HEREbuf1 DB 30buf1_slen DB ?buf1_data DB 30 dup(?)bufname DB 20bufname_slen DB ?bufname_data DB 20 dup(?)bufgetint DB 32bufgetint_slen DB ?bufgetint_data DB 32 dup(?)str_menu DB 0dH, 0aH, '=====Student marks system=====', 0dH, 0aH, 0dH, 0aH DB ' 1)Add Record', 0dH, 0aH, 0dH, 0aHDB ' 2)Print All', 0dH, 0aH, 0dH, 0aHDB ' 3)Save', 0dH, 0aH, 0dH, 0aHDB ' 4)Open', 0dH, 0aH, 0dH, 0aH, 0dH, 0aHDB ' 5)Find', 0dH, 0aH, 0dH, 0aH, 0dH, 0aHDB ' 6)Delete', 0dH, 0aH, 0dH, 0aH, 0dH, 0aHDB ' 0)Exit', 0dH, 0aHDB 'Choice:$';Error Stringsstr_error_1 DB 'Error input!', 0dH, 0aH, '$'jump_tb DW case_0DW case_1DW case_2DW case_3DW case_4DW case_5DW case_6head DW ? ;表头指针info_0 db 'input num:', '$'info_1 db 'input math:', '$'info_2 db 'input english:', '$'info_3 db 'input chinese:', '$'info_4 db 'input others:', '$'info_5 db 'input name:', '$'str_tb_head db 'Num', 9,'Name', 9, 'Maths', 9, 'English', 9, 'Chinese', 9,'Others', 9, 'Total', 9, 'Avg', 0dH, 0aHdb '=================================================================', 0dH,0aH,'$'str_tab db 9, '$'rdata db (StructNode * (max_record+1)) dup(?) ;全部结点*(100+1)rdata_p dw rdata ;下一个可用结点rcount dw 00H ;当前已分配的结点数newnode dw ?pnode dw ?file_name db 'c:\student.txt', 00Hfile_error1 db 'Failed create file...', 0DH, 0AH, '$'file_error2 db 'Failed write file...', 0DH, 0AH, '$'file_error3 db 'Failed open the file...', 0DH, 0AH, '$'file_error4 db 'Failed read file...', 0DH, 0AH, '$'file_info_1 db 'saving the file...', 0DH, 0AH, '$'file_info_2 db 'Write to file successfully!', 0DH, 0AH, '$'file_info_3 db 'opening the file...', 0DH, 0AH, '$'file_info_4 db 'read the file successfully!', 0DH, 0AH, '$'fp1 dw ? ;文件指针data_seg ends;*******************************************************************************;******************************************************************************* extdata_seg segment ;define extra data segment;EXTRA DATA GOES HEREextdata_seg ends;*******************************************************************************;******************************************************************************* stack_seg segment stack ;define extra data segment;STACK DATA GOES HEREDB 100H dup(?)stack_seg ends;*******************************************************************************;******************************************************************************* program segment ;define code segment;******************************************************************************* main proc far ;main part of programassume cs:program, ds:data_seg, es:extdata_seg, ss:stack_segstart:;set up stack for returnpush dssub ax, axpush ax;set DS register to current data segmentmov ax, data_seg ;data_seg segment addrmov ds, ax ;into DS registermov ax, extdata_seg ;extdata_seg segment addrmov es, ax ;into ES registermov ax, stack_seg ;stack_seg segment addrmov ss, ax ;into SS register;MAIN PART OF PROGRAM GOES HERE;分配链表头结点mov ax, rdata_pmov head, ax ;当前头指针就是rdata_p add rdata_p, StructNodemov bx, headmov word ptr [bx+Node_next], 00Hlb_print_menu:;打印菜单lea dx, str_menumov ah, 09Hint 21Hcall far ptr getintcmp dx, max_menu_indexja lb_print_menumov di, dxshl di, 1jmp jump_tb[di]jmp lb_print_menucase_0:;Exitretcase_1:;添加记录call far ptr addrecordjmp lb_print_menucase_2:;打印所有记录call far ptr print_recordjmp lb_print_menucase_3:;保存到文件call far ptr save_recordjmp lb_print_menucase_4:;从文件中读取call far ptr read_recordjmp lb_print_menucase_5:;查找call far ptr find_recordjmp lb_print_menucase_6:;删除call far ptr delete_recordjmp lb_print_menuret ;return to DOSmain endp ;end of main part of program;*******************************************************************************;******************************************************************************* sub1 proc near ;define subprocedurepush axpush bxpush cxpush dx;main port of sub procedure;exit sub procedurepop dxpop cxpop bxpop axretsub1 endp ;end of subprocedure;*******************************************************************************;******************************************************************************* ;print CRLFcrlf proc farpush dxpush axmov dl, 0dHmov ah, 02Hint 21Hmov dl, 0aHmov ah, 02Hint 21hpop axpop dxretcrlf endp;*******************************************************************************;******************************************************************************* ;从键盘输入一个整数,结果保存到dx中getint proc far ;define subprocedurepush axpush bxpush cx;main port of sub proceduremov dx, offset bufgetint ;offset 偏移地址mov ah, 0aHint 21Hcall far ptr crlfmov ax, offset bufgetint_datapush ax ;字符串首地址mov al, bufgetint_slencbw ;字节转字push ax ;字符串长度push ax ;返回值call far ptr decibinpop dxpop axpop ax;exit sub procedurepop cxpop bxpop axretgetint endp ;end of subprocedure;*******************************************************************************;******************************************************************************* ;把以十制进数形式存储在字符串中的数转成整数;栈中的参数:;0 字符串首地址;1 字符串长度;2 存放结果decibin_para_len equ 3decibin_str1 equ word ptr[bp+4+(decibin_para_len-0)*2]decibin_str1len equ word ptr[bp+4+(decibin_para_len-1)*2]decibin_retsult equ word ptr[bp+4+(decibin_para_len-2)*2]decibin proc far;save registerspush bpmov bp, sppush axpush bxpush cxpush dxpush sipush dimov bx, 00Hmov cx, decibin_str1lenmov di, decibin_str1decibin_loop1:mov al, byte ptr [di] ; di为偏移量以字节为单位把地址送入aland al, 0fHcbwxchg bx, axmov si, 10mul siadd bx, axinc diloop decibin_loop1mov decibin_retsult, bxexit_decibin:;恢复寄存器pop dipop sipop dxpop cxpop bxpop axpop bpretdecibin endp;*******************************************************************************;******************************************************************************* ;把bx中的数以十进制形式输出;输入:数据存放在bx中binidec proc farpush axpush bxpush cxpush dxpush simov si, 01Hmov cx,10000d ;各位依次输出call dec_divmov cx,1000dcall dec_divmov cx,100dcall dec_divmov cx,10dcall dec_divmov cx,1dmov si, 00Hcall dec_divpop sipop dxpop cxpop bxpop axretbinidec endpdec_div proc nearmov ax,bxmov dx,0div cxmov bx,dx ;保留余数mov dl,al ;商送入dlcmp si, 00H ;输出这一位je lb1_dec_divcmp dl, 00H ;处理完毕je exit_dec_divmov si, 00Hlb1_dec_div:add dl,30hmov ah, 02Hint 21Hexit_dec_div:retdec_div endp;*******************************************************************************;******************************************************************************* addrecord proc far ;define subprocedurepush axpush bxpush cxpush dxpush sipush dipush es;main port of sub proceduremov ax, rdata_p ;当前指针移入axmov newnode, ax ;再移入newnode存储单元中add rdata_p, StructNode ;相当于指针加一add rcount, 1 ;计数器加一mov bx, ax ;当前指针(newnode所指)移入bx mov cx, 00H ;计算总分mov word ptr [bx+Node_next], 00H ;Node_next置lea dx, info_0mov ah, 09Hint 21Hcall far ptr getintcall crlfmov word ptr [bx+Node_num], dxlea dx, info_1mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_maths], dxlea dx, info_2mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_english], dxlea dx, info_3mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_chinese], dxlea dx, info_4mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_others], dxmov word ptr [bx+Node_total], cx;计算平均成绩mov ax, cxcwdmov cx, 4div cxmov word ptr [bx+Node_avg], axlea dx, info_5mov ah, 09Hint 21H;输入姓名lea dx, bufnamemov ah, 0aHint 21Hcall far ptr crlfmov ax, dsmov es, axmov al, bufname_slencbwmov bx, axmov byte ptr bufname_data[bx], '$'lea si, bufname_datamov di, newnodemov cx, bxinc cxcldrep movsb;add the new node to the listmov di, newnode ;newnode现在存放的是当前项的地址mov si, head ;head存放的是头指针mov ax, word ptr [si+Node_next]mov word ptr [di+Node_next], ax ;当前加入项指向上次项(head指向的送当前项指针Node_next)mov word ptr [si+Node_next], di ;头指针指向当前加入项(当前项的地址送head);exit sub procedurepop espop dipop sipop dxpop cxpop bxpop axretaddrecord endp ;end of subprocedure;*******************************************************************************;*******************************************************************************print_record proc far ;define subprocedurepush axpush bxpush cxpush dxpush sipush di;main port of sub procedurelea dx, str_tb_headmov ah, 09Hint 21Hmov ax, headmov pnode, axloop1_print_record:mov si, pnodemov ax, [si+Node_next]mov pnode, axcmp ax, 00Hje exit_print_record1mov si, pnode;打印学号mov bx, [si+Node_num]call far ptr binidec;打印制表符lea dx, str_tabmov ah, 09Hint 21Hexit_print_record1: cmp ax,00hje exit_print_record ;非要分次跳跃;打印名字mov dx, simov ah, 09Hint 21H;打印制表符lea dx, str_tabmov ah, 09Hint 21H;数学成绩mov bx, [si+Node_maths]call far ptr binidec;打印制表符lea dx, str_tabmov ah, 09Hint 21H;英语成绩mov bx, [si+Node_english]call far ptr binidec;打印制表符lea dx, str_tabmov ah, 09Hint 21H;语文成绩mov bx, [si+Node_chinese]call far ptr binidec;打印制表符lea dx, str_tabmov ah, 09Hint 21H;语文成绩mov bx, [si+Node_others]call far ptr binidecloop1_print_record1:cmp ax,0000hje loop1_print_record;打印制表符lea dx, str_tabmov ah, 09Hint 21H;总成绩mov bx, [si+Node_total]call far ptr binidec;打印制表符lea dx, str_tabmov ah, 09Hint 21H;平均成绩mov bx, [si+Node_avg]call far ptr binideccall far ptr crlfmov ax,0000hjmp loop1_print_record1exit_print_record:;exit sub procedurepop dipop sipop dxpop cxpop bxpop axretprint_record endp ;end of subprocedure;*******************************************************************************;******************************************************************************* save_record proc far ;define subprocedurepush axpush bxpush cxpush dxpush sipush di;main port of sub procedure;Create filelea dx, file_namemov cx, 00Hmov ah, 3cHint 21Hjc save_record_error1mov fp1, ax;write record countmov ah, 40Hmov bx, fp1mov cx, 02Hlea dx, rcountint 21Hjc save_record_error2lea dx, file_info_1mov ah, 09Hint 21Hmov ax, headmov pnode, axloop1_save_record:mov si, pnodemov ax, [si+Node_next]mov pnode, axcmp ax, 00Hje save_record_ok;write current node to the filemov ah, 40Hmov bx, fp1mov cx, StructNodemov dx, pnodeint 21Hjc save_record_error2jmp loop1_save_recordsave_record_ok:lea dx, file_info_2mov ah, 09Hint 21Hjmp save_record_close_filesave_record_error1:lea dx, file_error1mov ah, 09Hint 21Hjmp exit_save_recordsave_record_error2:lea dx, file_error2mov ah, 09Hint 21Hjmp exit_save_recordsave_record_close_file:mov ah, 3eHmov bx, fp1int 21Hexit_save_record:;exit sub procedurepop dipop sipop dxpop cxpop bxpop axretsave_record endp ;end of subprocedure;*******************************************************************************;******************************************************************************* read_record proc far ;define subprocedurepush axpush bxpush cxpush dxpush sipush di;main port of sub procedure;Open filelea dx, file_namemov ah, 3dHmov al, 00Hint 21Hjc read_record_error1mov fp1, ax;read record countmov ah, 3fHmov bx, fp1mov cx, 02Hlea dx, rcountint 21Hjc read_record_error2lea dx, file_info_3mov ah, 09Hint 21H;分配链表头结点lea ax, rdatamov head, axmov rdata_p, axadd rdata_p, StructNodemov bx, headmov word ptr [bx+Node_next], 00Hmov cx, rcountloop1_read_record:push cxmov ax, rdata_pmov newnode, axadd rdata_p, StructNode;read new nodemov ah, 3fHmov bx, fp1mov cx, StructNodemov dx, newnodeint 21Hjc read_record_error2;add new node to listmov di, newnodemov si, headmov ax, word ptr [si+Node_next]mov word ptr [di+Node_next], axmov word ptr [si+Node_next], dipop cxloop loop1_read_recordread_record_ok:lea dx, file_info_4mov ah, 09Hint 21Hjmp read_record_close_fileread_record_error1:lea dx, file_error3mov ah, 09Hint 21Hjmp exit_read_recordread_record_error2:lea dx, file_error4mov ah, 09Hint 21Hjmp exit_read_recordread_record_close_file:mov ah, 3eHmov bx, fp1int 21Hexit_read_record:;exit sub procedurepop dipop sipop dxpop cxpop bxpop axretread_record endp ;end of subprocedure;******************************************************************************* find_record proc farpush axpush bxpush cxpush dxpush sipush dilea dx, info_0mov ah, 09Hint 21Hcall far ptr getintcall crlfmov si, headmov di, headfind_again: mov di,word ptr [di+Node_next]cmp dx ,word ptr [di+Node_num] ;第n个结点的学号je modify_recordjmp find_againmodify_record: mov bx, di ;当前指针(newnode所指)移入bx mov cx, 00H ;计算总分lea dx, info_0mov ah, 09Hint 21Hcall far ptr getintcall crlfmov word ptr [bx+Node_num], dxlea dx, info_1mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_maths], dxlea dx, info_2mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_english], dxlea dx, info_3mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_chinese], dxlea dx, info_4mov ah, 09Hint 21Hcall far ptr getintcall crlfadd cx, dxmov word ptr [bx+Node_others], dxmov word ptr [bx+Node_total], cx;计算平均成绩mov ax, cxcwdmov cx, 4div cxmov word ptr [bx+Node_avg], axpop dipop sipop dxpop cxpop bxpop axretfind_record endp;******************************************************************************* delete_record proc farpush axpush bxpush cxpush dxpush sipush dilea dx, info_0mov ah, 09Hint 21Hcall far ptr getintcall crlfmov si, headmov di, headgo_again: mov di,word ptr [di+Node_next]cmp dx ,word ptr [di+Node_num] ;第n个结点的学号je de_recordjmp go_againde_record:mov si, word ptr[si+Node_next]mov ax,word ptr[si+Node_num]mov word ptr[di+Node_num],axmov ax,word ptr[si+Node_name]mov word ptr[di+Node_name],axmov ax,word ptr[si+Node_name+2]mov word ptr[di+Node_name+2],axmov ax,word ptr[si+Node_name+4]mov word ptr[di+Node_name+4],axmov ax,word ptr[si+Node_name+6]mov word ptr[di+Node_name+6],axmov ax,word ptr[si+Node_name+8]mov word ptr[di+Node_name+8],axmov ax,word ptr[si+Node_name+10]mov word ptr[di+Node_name+10],axmov ax,word ptr[si+Node_maths]mov word ptr[di+Node_maths],axmov ax,word ptr[si+Node_english]mov word ptr[di+Node_english],axmov ax,word ptr[si+Node_chinese]mov word ptr[di+Node_chinese],axmov ax,word ptr[si+Node_others]mov word ptr[di+Node_others],axmov ax,word ptr[si+Node_total]mov word ptr[di+Node_total],axmov ax,word ptr[si+Node_avg]mov word ptr[di+Node_avg],axmov si,headmov di,headmov di,word ptr [di+Node_next]mov ax,word ptr [di+Node_next]mov word ptr[si+Node_next],axsub rcount, 1pop dipop sipop dxpop cxpop bxpop axretdelete_record endp;*******************************************************************************program ends ;end of code segment;******************************************************************************* end start ;end of assembly。